从r中的数据名列表中合并多个数据名的循环



我有多个数据框架,并且有几个dfs具有相似的id。我想合并那些行数相似的dfs

df1_ID1
ID b c d
1 x y z
1 y z x
1 z x y
df2_ID1
ID b c d
1 x y z
1 y z x
1 z x y
df3_ID2
ID b c d
2 x y z
2 y z x
2 z x y

我想要的是

ID1
ID b c d b c d
1 x y z x y z
1 y z x y z x
1 z x y z x y

我正在尝试这样的代码:

for (i in 1:length(df)) {
columnnames<-df[[i]][["b"]]
if (df[[i]][["ID"]] == df[[i++]][["ID"]])
merge.data.frame(df[[i]],df[[i++]], by = "ID")
}

我不喜欢最终会出现多个具有相同名称的列,但这正是您想要的。
你并没有真正要求合并,因为那将给出3 x 3 = 9行,所以我使用了cbind。
(为了避免混淆,我将data.frames列表的名称改为df_list)

df_list <- list(
data.frame(ID = 1, b = c('x', 'y', 'z'), c = c('y', 'z', 'x'), d = c('z', 'x', 'y')),
data.frame(ID = 1, b = c('x', 'y', 'z'), c = c('y', 'z', 'x'), d = c('z', 'x', 'y')),
data.frame(ID = 2, b = c('x', 'y', 'z'), c = c('y', 'z', 'x'), d = c('z', 'x', 'y'))
)
for (i in 1:(length(df_list) - 1)) {
if (NROW(df_list[[i]]) == NROW(df_list[[i + 1]]) &&
all(df_list[[i]]$ID == df_list[[i + 1]]$ID)) {
df_list[[i]] <- cbind(df_list[[i]], df_list[[i + 1]][, -1])
df_list[[i + 1]] <- list()
}
}
df_list <- df_list[!sapply(df_list, function(x) NROW(x) == 0)]
df_list
[[1]]
ID b c d b c d
1  1 x y z x y z
2  1 y z x y z x
3  1 z x y z x y
[[2]]
ID b c d
1  2 x y z
2  2 y z x
3  2 z x y

最新更新