我希望合并行,删除重复内容,但保持唯一身份。我可以做前两个,但不是第二个。我有一个名为subject的df,看起来像这样:
unique_id subject grade
1 Math 88
1 English 78
1 History 98
2 Math 65
2 English 72
2 History 84
此代码
combined <- distinct(subject, unique_id, .keep_all = TRUE)
给了我这个输出:
unique_id subject grade
1 Math 88
2 Math 65
我希望看起来像这样:
unique_id subject grade
1 Math, English, History 88, 78, 98
2 Math, English, History 65, 72, 84
以下解决方案完美无缺!这是问题的另一个问题。
如果我有一个如下所示的数据集:
unique_id school subject grade sex
1 great Math 88
1 great English 78
1 great History 98 male
2 spring Math 65
2 spring English 72 female
2 spring History 84
并运行以下代码:
(r2 <- df %>%
group_by(unique_id) %>%
summarise_each(funs(toString(unique(.)))))
我得到以下输出:
unique_id school subject grade sex
1 great Math, English, History 88,78,98 , male
2 spring English, English, History 65,72,84 , female
有没有办法让它将空单元格与性别类别中的逗号组合在一起,所以它看起来像这样:
unique_id school subject grade sex
1 great Math, English, History 88,78,98 male
2 spring English, English, History 65,72,84 female
谢谢!
答案 0 :(得分:2)
我们可以通过粘贴(toString
是paste(., collapse=", ")
的包装器)来完成此操作。在按“unique_id”分组后,每列的唯一元素一起
library(dplyr)
(r1 <- df %>%
group_by(unique_id) %>%
summarise_each(funs(toString(unique(.)))))
# unique_id subject grade
# <int> <chr> <chr>
#1 1 Math, English, History 88, 78, 98
#2 2 Math, English, History 65, 72, 84
或者我们可以将其保留为list
,然后提取list
元素
r2 <- df %>%
group_by(unique_id) %>%
summarise_each(funs(list(unique(.))))
从“r2”开始,如果需要,我们可以unnest
(来自tidyr
)
library(tidyr)
r2 %>%
unnest()
如果我们在distinct
中使用OP方式,我们可以从unique
中移除summarise_each
。
df %>%
distinct(subject, unique_id, .keep_all=TRUE) %>%
group_by(unique_id) %>%
summarise_each(funs(toString(.)))