我有这样的数据框
df=data.frame(a=rep(c("x","y"),2),b=c("Rome", "Venice", "Barcelona", "Paris"))
Run Code Online (Sandbox Code Playgroud)
我希望按列a嵌套b,以便显示
x Rome, Barcelona
y Venice, Paris
Run Code Online (Sandbox Code Playgroud)
然而,这似乎没有做到这一点.任何建议?
如建议
df$b=as.character(df$b)
df=as.data.frame(df %>% group_by(a) %>% nest(b))
Run Code Online (Sandbox Code Playgroud)
但是df的新数据列似乎是tbl_df格式,结果是这样的
a data
x list(b = c("Rome", "Barcelona")
Run Code Online (Sandbox Code Playgroud)
有没有办法使新的嵌套列只是正常的字符串组合?
如果您没有结合tidyr/ nest解决方案,只需dplyr使用以下方法即可:
df %>%
group_by(a) %>%
summarise(b = paste(b, collapse = ", "))
Run Code Online (Sandbox Code Playgroud)
返回:
a b
<fctr> <chr>
1 x Rome, Barcelona
2 y Venice, Paris
Run Code Online (Sandbox Code Playgroud)
如果你想使用nest,你可以使用map_chrfrom purrr来做你想要的:
df %>%
mutate(b = as.character(b)) %>%
nest(b) %>%
mutate(cityList = map_chr(data, ~paste(.$b, collapse = ", "))) %>%
select(-data)
Run Code Online (Sandbox Code Playgroud)
请注意,正如@ joel.wilson指出的那样,为此,如果它们是一个因素,您可能需要将城市名称显式转换为字符.它返回:
a cityList
<fctr> <chr>
1 x Rome, Barcelona
2 y Venice, Paris
Run Code Online (Sandbox Code Playgroud)