0
我有一个数据集如下:R:如何删除行并将变量的值作为逗号分隔值添加到上一行?
col1 col2
a 1
a 2
b 1
b 3
c 4
我想要的输出如下:
col1 col2
a 1,2
b 1,3
c 4
怎么可能在R'
我有一个数据集如下:R:如何删除行并将变量的值作为逗号分隔值添加到上一行?
col1 col2
a 1
a 2
b 1
b 3
c 4
我想要的输出如下:
col1 col2
a 1,2
b 1,3
c 4
怎么可能在R'
我们可以按'col1'和paste
分组''col2'与collapse=','
选项。一个方便的包装将是toString
。这可以通过任何聚合组功能来完成。例如,对于data.table
,我们将 'data.frame' 到 'data.table'(setDT(df1)
),并使用逻辑从base R
aggregate(col2~col1, df1, FUN=toString)
上述
library(data.table)
setDT(df1)[, list(col2 = toString(col2)), by = col1]
或用aggregate
描述
如果您需要list
'col2'输出
aggregate(col2~col1, df1, FUN=I)
或者使用dplyr
library(dplyr)
df1 %>%
group_by(col1) %>%
summarise(col2= toString(col2))
弓掌握但是这是快速和高效利用内存 – The6thSense
@VigneshKalai感谢您的意见。对于大数据集,“聚合”会很慢。我认为'dplyr'和'data.table'的表现相似,尽管我给'data.table'一些优势(虽然没有进行基准测试) – akrun
@VigneshKalai,不要去冒犯,而是问问哪种方法会很快,对不同问题的记忆效率,您可以尝试自行探索。请查看'microbenchmark'软件包,并阅读http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example以了解如何生成模拟数据集。然后用这些模拟数据集运行基准来得出你自己的结论。这样做也可以帮助您更好地理解R和常用软件包。 – A5C1D2H2I1M1N2O1R2T1