我有一個包含多列的資料框,如下所示:
df <- data.frame(
Level = c(
'Midwest',
'Wisconsin: Good',
'Wisconsin: Neutral',
'Wisconsin: Bad',
NA,
'Minnesota: Good',
'Minnesota: Neutral',
'Minnesota: Bad',
NA,
'New England',
'New Hampshire: Good',
'New Hampshire: Neutral',
'New Hampshire: Bad',
NA,
'Vermont: Good',
'Vermont: Neutral',
'Vermont: Bad'
),
TotalPct = c(
NA,
'75%',
'71%',
'65%',
NA,
'82%',
'76%',
'53%',
NA,
NA,
'68%',
'98%',
'45%',
NA,
'79%',
'93%',
'48%'
)
)
我有興趣對這個資料框做兩件事:
Good獲取每個州的第一個關卡實體,并將其放置在關于該Good關卡的新行中,然后...- 從每個級別,以便它只是顯示取出狀態的名字
Good,Neutral和Bad下面的每個國家的名字。
結果如下所示:
df_desired <- data.frame(
Level = c(
'Midwest',
'Wisconsin',
'Good',
'Neutral',
'Bad',
NA,
'Minnesota',
'Good',
'Neutral',
'Bad',
NA,
'New England',
'New Hampshire',
'Good',
'Neutral',
'Bad',
NA,
'Vermont',
'Good',
'Neutral',
'Bad'
),
TotalPct = c(
NA,
NA,
'75%',
'71%',
'65%',
NA,
NA,
'82%',
'76%',
'53%',
NA,
NA,
NA,
'68%',
'98%',
'45%',
NA,
NA,
'79%',
'93%',
'48%'
)
)
使用 R 實作這一目標的最佳方法是什么,dplyr如果可能的話最好使用?
uj5u.com熱心網友回復:
我有點不清楚你想要什么,但這通常是非常有用的格式:
df %>%
separate(Level, c("State", "Level"), sep = ": ") %>%
na.omit() %>%
print(n = Inf)
# A tibble: 12 x 3
State Level TotalPct
<chr> <chr> <chr>
1 Wisconsin Good 75%
2 Wisconsin Neutral 71%
3 Wisconsin Bad 65%
4 Minnesota Good 82%
5 Minnesota Neutral 76%
6 Minnesota Bad 53%
7 New Hampshire Good 68%
8 New Hampshire Neutral 98%
9 New Hampshire Bad 45%
10 Vermont Good 79%
11 Vermont Neutral 93%
12 Vermont Bad 48%
uj5u.com熱心網友回復:
這感覺很笨重,但我認為它到了那里:
library(tidyverse)
df %>%
separate(Level, c("region", "rating"), sep = ": ") %>%
mutate(copies = if_else(rating != "Good" | is.na(rating), 1, 2)) %>%
uncount(copies, .id = "id") %>%
mutate(TotalPct = if_else(rating == "Good" & id == 1, NA_character_, TotalPct),
level = if_else(is.na(TotalPct), region, rating)) %>%
select(level, TotalPct)
結果
level TotalPct
1 Midwest <NA>
2 Wisconsin <NA>
3 Good 75%
4 Neutral 71%
5 Bad 65%
6 <NA> <NA>
7 Minnesota <NA>
8 Good 82%
9 Neutral 76%
10 Bad 53%
11 <NA> <NA>
12 New England <NA>
13 New Hampshire <NA>
14 Good 68%
15 Neutral 98%
16 Bad 45%
17 <NA> <NA>
18 Vermont <NA>
19 Good 79%
20 Neutral 93%
21 Bad 48%
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352296.html
