合并具有相同 ID 变量的行 [重复]

Posted

技术标签:

【中文标题】合并具有相同 ID 变量的行 [重复]【英文标题】:Merging rows with the same ID variable [duplicate] 【发布时间】:2016-05-12 23:40:28 【问题描述】:

我在 R 中有一个数据框,其中包含 2186 个 obs 的 38 个变量。行有一个 ID 变量引用独特的实验并使用

length(unique(df$ID))==nrow(df)

n_occur<-data.frame(table(df$ID))

我知道我的 327 行有重复的 ID,其中一些 ID 重复了不止一次。我正在尝试合并具有相同 ID 的行,因为这些行不是重复的,而只是给定实验中的第二个、第三个等观察结果。

例如,如果我有

x y ID
1 2 a
1 3 b
2 4 c
1 3 d
1 4 a
3 2 b
2 3 a

我想结束

x y ID x2 y2 ID2 x3 y3 ID3
1 2 a  1  4  a   2  3  a
1 3 b  3  2  b  na na na
2 4 c  na na na na na na
1 3 d  na na na na na na

我见过类似的 SQL 和 php 问题,但这对我在 R 中的尝试没有帮助。任何帮助将不胜感激。

【问题讨论】:

我认为你可以使用合并功能。 另请查看here 或here @akrun 我重新打开了,因为原来的 imo 不是很好。您提供的第二个链接要好得多。现在再次标记为重复。 其他欺骗链接为here或here或here 【参考方案1】:

您可以使用data.table 包中的增强型dcast 函数来选择多个值变量。使用setDT(mydf),您可以将数据框转换为数据表,使用[, idx := 1:.N, by = ID],您可以通过ID 添加索引,随后在dcast 公式中使用该索引:

library(data.table)
dcast(setDT(mydf)[, idx := 1:.N, by = ID], ID ~ idx, value.var = c("x","y"))

或者配合development version of data.table (v1.9.7+),你可以使用新的rowid函数:

dcast(setDT(mydf), ID ~ rowid(ID), value.var = c("x","y"))

给予:

   ID x_1 x_2 x_3 y_1 y_2 y_3
1:  a   1   1   2   2   4   3
2:  b   1   3  NA   3   2  NA
3:  c   2  NA  NA   4  NA  NA
4:  d   1  NA  NA   3  NA  NA

使用过的数据:

mydf <- structure(list(x = c(1L, 1L, 2L, 1L, 1L, 3L, 2L), y = c(2L, 3L, 
4L, 3L, 4L, 2L, 3L), ID = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 
1L), .Label = c("a", "b", "c", "d"), class = "factor")), .Names = c("x", 
"y", "ID"), class = "data.frame", row.names = c(NA, -7L))

【讨论】:

感谢您的回复,抱歉重复了!

以上是关于合并具有相同 ID 变量的行 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

spark:合并两个数据帧,如果两个数据帧中的ID重复,则df1中的行覆盖df2中的行

两个数据框,计算重复的ID并与另一个具有相同ID的数据框合并?

当DataFrame具有不同的值时,如何将重复行合并为一个

使用角度js将具有相同ID的重复对象从json数据合并为单个对象

合并具有相同属性但 ID 不同的 NSManagedObject,与 iCloud 同步会导致重复(Core Data,Swift 1.2)

获取具有特定数量的重复值的行