我的数据集包含:

  • 我想要删除的重复ID(第ID1ID2列)
  • List可以包含重复项之间不同的规范(type: string),
  • 以及2列V1V2,其中包含我希望在重复项之间添加sum的值(type: int).

我的数据集的一个简单示例是:

df <- data.frame(
  ID1 = c('A','A','B','C','D','D'), 
  ID2 = c('A','A','B1','C1','DE','DE'),
  List = c('LA','LA','LB','LC','L1D','L2D'),
  V1 = c(1, 0, 1, 1, 1, 1),
  V2 = c(0, 1, 0, 0, 1, 1),
  stringsAsFactors = FALSE
)

> df
  ID1 ID2 List V1 V2
1   A   A    LA  1  0
2   A   A    LA  0  1
3   B  B1    LB  1  0
4   C  C1    LC  1  0
5   D  DE   L1D  1  1
6   D  DE   L2D  1  1

我想以这个结束:

> df_final
  ID1 ID2  List_1  List_2 V1 V2
1   A   A      LA      LA  1  1
3   B  B1      LB          1  0
4   C  C1      LC          1  0
5   D  DE     L1D     L2D  2  2

所以我的 idea 是首先dcast List专栏:

df <- df %>%
  group_by(ID1, ID2) %>%
  mutate(Index = row_number(List))

然后用类似的内容进行dcast:

df <- dcast(df, ID1+ID2 +V1 + V2 ~ Index, value.var = "List", fun.aggregate =sum)

但当还涉及因素时(这是有道理的),它无法处理sum.如何才能最好地做到这一点才能达到df_final

推荐答案

基本R选项,包含aggregate + merge

merge(
    aggregate(List ~ ID1 + ID2, df, `length<-`, 2),
    aggregate(cbind(V1, V2) ~ ID1 + ID2, df, sum)
)

这给

  ID1 ID2 List.1 List.2 V1 V2
1   A   A     LA     LA  1  1
2   B  B1     LB   <NA>  1  0
3   C  C1     LC   <NA>  1  0
4   D  DE    L1D    L2D  2  2

R相关问答推荐

使用ggcorrplot删除值,但保留不重要相关性的 colored颜色

在集合群体模型中计算时间步依赖的速率/参数

如何使用ggplot重新绘制LASO回归图?

在特定列上滞后n行,同时扩展框架的长度

判断字符串中数字的连续性

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

用derrr在R中查找组间的重复项

手动打印线型gplot

ggplot2中的X轴显示数值,单位为百,而不是十

如何直接从Fortran到R的数组大小?

R函数‘paste`正在颠倒其参数的顺序

如何在ggplot图中找到第二轴的比例

将数字转换为分钟和秒

如何使用tryCatch执行语句并忽略警告?

将二进制数据库转换为频率表

使用范围和单个数字将数字与字符串进行比较

是否有新方法来更改Facet_WRAP(Ggplot2)中条文本的文本 colored颜色 ?

提高圣彼得堡模拟的速度

SHILINY中DT列的条件着色

排序R矩阵的行和列