根据具有相同列结构的多个数据框中的特定条件删除列

时间:2018-05-10 15:23:02

标签: r dataframe data-cleaning

我有4个不同数据组(总共16个数据帧)的4个数据帧,它们具有相同的列结构,每个数据帧都有a,b,c,d等列(超过数百列),但每个数据的值不同数据框。唯一相同的是变量和列名的数量(在某种程度上,但没有模式。列名是项的名称,而不是a,b,c等),每个"数据组"

例如:

dat1 = data.frame(x = c(0.1,0.2,0.3,0.4,0.5),
                  y = c(0.6,0.7,0.8,0.9,0.10), 
                  z = c(0.12,0.13,0.14,0.15,0.16))    

产生

   x   y    z
1 0.1 0.6 0.12
2 0.2 0.7 0.13
3 0.3 0.8 0.14
4 0.4 0.9 0.15
5 0.5 0.1 0.16

和第二个数据框

dat2 = data.frame(x = c(1,2,3,4,5), y = c(6,7,8,9,10), z = c(12,13,14,15,16))

  x  y  z
1 1  6 12
2 2  7 13
3 3  8 14
4 4  9 15
5 5 10 16

我希望根据特定条件在dat1中进行数据清理,这样如果我删除x中的列dat1,那么列x也会被删除dat2。这些具体标准可能是

dat1[,tail(dat1, n = 1) < 0.2] 

   y    z
1 0.6 0.12
2 0.7 0.13
3 0.8 0.14
4 0.9 0.15
5 0.1 0.16

这样dat2也会自动删除colunm x

   y  z
1  6 12
2  7 13
3  8 14
4  9 15
5 10 16

有办法做到这一点吗?我一直试图在StackOverflow上搜索它,但我找不到任何有用的东西。谢谢。

1 个答案:

答案 0 :(得分:1)

这样的事情?
使用您发布的数据,它可以按预期工作。

cols.to.remove <- function(DF1, DF2) {
    d <- setdiff(names(DF1), names(DF2))
    -which(d %in% names(DF1))
}


dat2 <- dat2[cols.to.remove(dat2, dat1)]
dat2
#   y  z
#1  6 12
#2  7 13
#3  8 14
#4  9 15
#5 10 16