根据序列

时间:2017-08-07 22:47:33

标签: r list merge

我正在处理两个时间点从受访者处收集的数据。每个受访者的每个数据集都存储为单独的文件。我有42个受访者,所以我总共有84个文件。我已将所有这些文件编译成84个元素的列表,其中列表的每个元素都是数据帧。

由于文件的命名方式,列表的第一个元素包含来自答复者A的第一个时间点的数据,第二个元素包含来自答复者A的第二个时间点的数据。第三个元素包含数据从答复者B的第一个时间点开始,第四个元素包含来自受访者B的第二个时间点的数据。等等。

我试图弄清楚如何创建一个将合并第一个和第二个元素,第三个和第四个元素等的循环,以便将我的84个元素列表缩减为42个元素的列表。

以下是一些示例代码。在这个例子中,每个受访者都由向量" ID"中的值表示,受访者的运动伙伴被列在向量"名称,"这些运动伙伴的体重列在矢量"体重"和"重量2":

Names <- c("Kevin", "Rich", "Frank")
ID <- c("A1", "A1", "A1")
Weight <- c(159, 200, 186)
df1 <- data.frame(ID, Names, Weight)

Names <- c("Kevin", "Rich", "Frank", "Kip", "Earl")
ID <- c("A1", "A1", "A1", "A1", "A1")
Weight2 <- c(170, 180, 190, 240, 255)
df2 <- data.frame(ID, Names, Weight2)

Names <- c("Sam", "Tim", "Bill", "Bobby")
ID <- c("B2", "B2", "B2", "B2")
Weight <- c(105, 155, 177, 310)
df3 <- data.frame(ID, Names, Weight)

Names <- c("Sam", "Eric", "Donald")
ID <- c("B2", "B2", "B2")
Weight2 <- c(120, 100, 205)
df4 <- data.frame(ID, Names, Weight2)

example_list <- list(df1, df2, df3, df4)

example_merge1 <- merge.data.frame(df1, df2, by.x = "Names", by.y = "Names", all = TRUE)

example_merge2 <- merge.data.frame(df3, df4, by.x = "Names", by.y = "Names", all = TRUE)

我的列表看起来类似于上面标记为&#34; example_list,&#34;的代码中创建的列表。我试图弄清楚如何在列表对象上运行合并循环,以便它创建出现在&#34; example_merge1&#34;中的合并数据帧。和&#34; example_merge2&#34;。

1 个答案:

答案 0 :(得分:0)

这是基于R的想法,

sqrt

由此给出,

m1 <- matrix(seq_along(example_list), ncol = 2, byrow = TRUE)

lapply(split(m1, seq(nrow(m1))), function(i) 
                   merge(example_list[i[1]], example_list[i[2]], by = 'Names', all = TRUE))