R 合并单独的列表

R 合并单独的列表,r,list,join,R,List,Join,我有两个单独的列表,一个包含个人ID,另一个包含个人的不同属性;在这种情况下,有3种不同的状态“a”、“b”和“c”。两个列表都包含4个不同的时间点:“p1”、“p2”、“p3”和“p4” 我的第一个直觉是创建4个data.frames并将它们连接起来,但是,这似乎效率很低,而且在一段时间内没有个人在场时,也没有给我提供放置NAs的信息。 非常感谢您的帮助。我们可以融化数据集然后进行重塑 library(reshape2) library(dplyr) library(tidyr) melt(i

我有两个单独的列表,一个包含个人ID,另一个包含个人的不同属性;在这种情况下,有3种不同的状态“a”、“b”和“c”。两个列表都包含4个不同的时间点:“p1”、“p2”、“p3”和“p4”

我的第一个直觉是创建4个data.frames并将它们连接起来,但是,这似乎效率很低,而且在一段时间内没有个人在场时,也没有给我提供放置NAs的信息。
非常感谢您的帮助。

我们可以
融化数据集
然后进行重塑

library(reshape2)
library(dplyr)
library(tidyr)
melt(id, value.name = 'id') %>%
    mutate(value2 = melt(states)[,1]) %>%        
    spread(L1, value2)
#  id   p1   p2   p3   p4
#1  1    a    c <NA> <NA>
#2  2    b    c <NA> <NA>
#3  3    c    b    b    b
#4  4    a    a    a    c
#5  5    c    b    b    b
#6  6 <NA>    c    c    b
#7  7 <NA> <NA> <NA>    a
#8  8 <NA> <NA> <NA>    b
library(重塑2)
图书馆(dplyr)
图书馆(tidyr)
熔化(id,value.name='id')%>%
突变(值2=熔体(状态)[,1])%>%
排列(L1,值2)
#id p1 p2 p3 p4
#1 a c
#2 b c
#33cbb
#4 a c
#5 c b b
#6 c b
#7 a
#8 b
数据
id是的,它是正确的。其背后的逻辑是,个体1在p1中有状态“a”,在p2中有状态“c”,然后从样本中退出。个体3的状态“c”、“b”、“b”、“b”在周期1到4中(对应于相应向量中的“位置”2,4,1,4)。感谢您的解释。我现在明白了。
ID p1 p2 p3 p4
1  a  c  NA NA
2  b  c  NA NA
3  c  b  b  b
...
library(reshape2)
library(dplyr)
library(tidyr)
melt(id, value.name = 'id') %>%
    mutate(value2 = melt(states)[,1]) %>%        
    spread(L1, value2)
#  id   p1   p2   p3   p4
#1  1    a    c <NA> <NA>
#2  2    b    c <NA> <NA>
#3  3    c    b    b    b
#4  4    a    a    a    c
#5  5    c    b    b    b
#6  6 <NA>    c    c    b
#7  7 <NA> <NA> <NA>    a
#8  8 <NA> <NA> <NA>    b
id <- list(p1 = c(4, 3, 1, 2, 5), p2 = c(6, 2, 5, 3, 1, 4), 
       p3 = c(3, 6, 5, 4), p4 = c(7, 5, 8, 3, 4, 6))
states = list(p1 = c('a', 'c', 'a', 'b', 'c'), p2 = c('c', 'c', 'b', 'b', 'c', 'a'),
      p3 = c('b', 'c', 'b', 'a'), p4 = c('a', 'b', 'b', 'b', 'c', 'b'))