【问题标题】:Merging Pairs of Elements in List Based on Sequence基于序列合并列表中的元素对
【发布时间】:2018-01-15 08:11:39
【问题描述】:

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

由于文件的命名方式,列表的第一个元素包含受访者 A 的第一个时间点的数据,第二个元素包含受访者 A 的第二个时间点的数据。第三个元素包含数据来自被调查者 B 的第一个时间点的数据,第四个元素包含来自被调查者 B 的第二个时间点的数据。以此类推。

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

这是一些示例代码。在此示例中,每个受访者由向量“ID”中的值表示,受访者的锻炼伙伴列在向量“Names”中,这些锻炼伙伴的体重列在向量“Weight”和“Weight2”中:

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)

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

【问题讨论】:

    标签: r list merge


    【解决方案1】:

    这是一个基于 R 的想法,

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

    这给了,

    $`1`
      Names ID.x Weight ID.y Weight2
    1 Frank   A1    186   A1     190
    2 Kevin   A1    159   A1     170
    3  Rich   A1    200   A1     180
    4  Earl <NA>     NA   A1     255
    5   Kip <NA>     NA   A1     240
    
    $`2`
       Names ID.x Weight ID.y Weight2
    1   Bill   B2    177 <NA>      NA
    2  Bobby   B2    310 <NA>      NA
    3    Sam   B2    105   B2     120
    4    Tim   B2    155 <NA>      NA
    5 Donald <NA>     NA   B2     205
    6   Eric <NA>     NA   B2     100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-15
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 2016-08-15
      • 2020-09-09
      相关资源
      最近更新 更多