合并具有相同ID变量的行

3
我在R中有一个数据框,有2186个观测值和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 中尝试。非常感谢您的帮助。

我认为你可以使用合并函数来完成这个任务。 - johannes_lalala
1
还可以看看这里或者这里 - akrun
@akrun 我重新打开了这个问题,因为我认为原来的不太好。你提供的第二个链接要好得多。现在再次标记为重复。 - Jaap
还有其他重复的链接在这里:链接1 或者 链接2 或者 链接3 - akrun
1个回答

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"))

或者使用 最新版本的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))

谢谢您的回复,很抱歉这是重复的! - suuz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接