这个问题在这里已有答案:
我想连接现在在一列中的每个组的值。以下是我想要争论的数据框的简短版本。
library(tidyverse)
df <- tibble::tribble(
~county, ~party,
"A", "VVD",
"A", "GL",
"A", "Local",
"B", "D66",
"B", "Local"
)
现在我想为每个县创建一行,其中所有各方都在他们自己的列中:
df2 <- tibble::tribble(
~county, ~party1, ~party2, ~party3,
"A", "VVD", "GL", "Local",
"B", "D66", "Local", NA
)
稍后与unite()
连接并替换逗号的下划线并删除NA。
df2 %>%
unite(party, c("party1", "party2", "party3")) %>%
mutate(party = gsub("_NA", "", party),
party = gsub("_", ", ", party))
我想要的df
输出:
county party
<chr> <chr>
1 A VVD, GL, Local
2 B D66, Local
我们可以通过创建序列列和spread
来实现
library(tidyverse)
df %>%
group_by(county) %>%
mutate(v1 = paste0('party', row_number())) %>%
spread(v1, party)
# A tibble: 2 x 4
# Groups: county [2]
# county party1 party2 party3
# <chr> <chr> <chr> <chr>
#1 A VVD GL Local
#2 B D66 Local <NA>
对于第二个输出,我们将'county'和paste
分组为'party'的元素
df %>%
group_by(county) %>%
summarise(party = toString(party))
# A tibble: 2 x 2
# county party
# <chr> <chr>
#1 A VVD, GL, Local
#2 B D66, Local
df %>%
group_by(county) %>%
dplyr::summarise( paste0(party, collapse = ", "))
如果有任何不清楚的地方,你应该将?group_by
(?paste0
等)提示给R控制台。