我在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中的尝试没有帮助。任何帮助都将非常感激。
答案 0 :(得分:4)
您可以使用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))