合并具有相同ID变量的行

时间:2016-02-03 16:41:22

标签: r merge duplicates unique

我在R中有一个数据帧,其中包含2186个38个变量的视野。行有一个ID变量,指的是独特的实验并使用

console.log(row[0].last_check)  returns Tue Feb 02 2016 18:24:19 GMT-0500 (EST)

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

例如,如果我有

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

n_occur<-data.frame(table(df$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

我已经看过SQL和php的类似问题,但这对我在R中的尝试没有帮助。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:4)

您可以使用包中的增强型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))