列表的R-补码

时间:2015-03-15 17:19:55

标签: r

我有一个数据框(df),其中列名是:

col1 col2 col3 col4

我有list(list1)个数据框,由df的列子集组成:

list1[1]:

    col1 col2


list1[2]:

    col2 col4

我想创建一个列表(list2),它是list1的补充。

所需的输出是:

list2[1]

    col3  col4

list2[2]

    col1  col3

即list2中的每个数据帧都是list1相对于df的补充。

我怎么能用R做到这一点?我会很高兴得到任何帮助。非常感谢。

2 个答案:

答案 0 :(得分:3)

我们可以使用setdiff来获取' df'的列名在' list1'中没有出现元素,并将其用于subset< df'

list2 <- lapply(list1, function(x) df[setdiff(colnames(df), colnames(x))])

 lapply(list2, names)
 #[[1]]
 #[1] "col3" "col4"

 #[[2]]
 #[1] "col1" "col3"

数据

set.seed(24)
df <- as.data.frame(matrix(sample(0:20, 5*4, replace=TRUE),
      ncol=4, dimnames=list(NULL, paste0('col', 1:4))) )
list1 <- list(df[1:2], df[c(2,4)])

答案 1 :(得分:2)

list2 <- lapply(list1, function(x) df[,!(names(df) %in% names(x))] )