gpt4 book ai didi

r - 合并具有相同 ID 变量的行

转载 作者:行者123 更新时间:2023-12-02 03:48:34 25 4
gpt4 key购买 nike

我有一个 R 数据帧,包含 38 个变量的 2186 个 obs。行有一个 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 中的尝试没有帮助。任何帮助将不胜感激。

最佳答案

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

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

关于r - 合并具有相同 ID 变量的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35182749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com