合并具有相同 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的数据框合并?
使用角度js将具有相同ID的重复对象从json数据合并为单个对象
合并具有相同属性但 ID 不同的 NSManagedObject,与 iCloud 同步会导致重复(Core Data,Swift 1.2)