r - 聚合相同但针对单个列的行
问题描述
我有一个看起来像这样的数据框:
entry color value1 value2
A blue 1 0
A green 1 0
B green 1 0
C red 0 1
我想将除颜色以外的所有列具有相同值的行组合起来用于输出:
entry color value1 value2
A blue, green 1 0
B green 1 0
C red 0 1
我已尝试使用plyr
并ddply
按照回答此问题时的建议https://www.biostars.org/p/167028/。此代码为这个最小的工作示例生成正确的输出。但是,我的实际数据集有 600 列,所以这不是一个可行的解决方案。有没有人有任何适用于更大数据集的建议?
df2 <-ddply(df, .(entry), summarize,
color=paste(unique(color),collapse=","),
value1=paste(unique(value1),collapse=",") ,
value2= paste(unique(value2),collapse=","))
示例数据框是:
df <- data.frame("entry" = c("A", "A", "B", "C"),"color" = c("blue", "green", "green", "red"), "value1" = c(1,1,1,0), "value2" = c(0,0,0,1))
编辑:为了解决可扩展性问题,我使用字符串向量输入调整了以下答案并在 dplyr 中按多列分组
首先使用其索引创建一个列名向量,减去感兴趣的列:
cnames <- names(df)[-2]
然后使用group_by_at
来自的函数dplyr
:
df %>%
group_by_at(vars(one_of(cnames))) %>%
summarise(color=paste(unique(color), collapse=",")) %>%
ungroup()
解决方案
你可以尝试一个tidyverse
library(tidyverse)
df %>%
group_by(entry, value1, value2) %>%
summarise(color=paste(unique(color), collapse=",")) %>%
ungroup()
# A tibble: 3 x 4
entry value1 value2 color
<fct> <dbl> <dbl> <chr>
1 A 1 0 blue,green
2 B 1 0 green
3 C 0 1 red
unique
如果您想像这样列出重复项,请
删除summarise(color=toString(color))
推荐阅读
- python - python错误-打印(i.price)AttributeError:'str'对象没有属性'price'-抱歉这么长的问题,但希望提供所有信息
- c++ - 如果一个函数定义有一个类模板类型的参数并且没有使用它(它的成员),那么它是否被实例化?
- python - 对于 json "r+",为什么我不能在同一个 "with" 语句中进行转储和加载?
- dialogflow-es - Google 操作帐户关联未触发
- aws-api-gateway - 指向同一对象的 OpenAPI ref 不起作用
- c++ - 在 C++ 文件中的何处以及如何定义 const 整数?
- javascript - Angular - TS 错误:预期参数声明
- java - 从 ArrayList 中删除“[]”
> 打印 - amazon-web-services - 在 AWS cloudwatch 我试图只授予对一个特定日志组的访问权限,但它显示了所有日志组
- python - 将数据集拆分为年度时间序列