我有一个数据框(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做到这一点?我会很高兴得到任何帮助。非常感谢。
答案 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))] )