根据特定条件从具有相同列结构的多个数据框中删除列
Remove columns based on specific criteria from multiple data frames with same column structures
我有 4 个数据框,用于 4 个不同的数据组(总共 16 个数据框),具有相同的列结构,每个数据框都有列 a、b、c、d 等(超过数百列),但值不同对于每个数据帧。唯一相同的是每个 "data group" 的变量数量和列名(在某种程度上,但没有模式。列名是项目的名称,而不是 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
中进行数据清理,这样如果我在 dat1
中删除列 x
,那么列 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
也会自动删除列 x
。
y z
1 6 12
2 7 13
3 8 14
4 9 15
5 10 16
有办法吗?我一直试图在 Whosebug 上搜索它,但找不到任何有用的东西。谢谢。
是这样的吗?
使用您发布的数据,它按预期工作。
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
我有 4 个数据框,用于 4 个不同的数据组(总共 16 个数据框),具有相同的列结构,每个数据框都有列 a、b、c、d 等(超过数百列),但值不同对于每个数据帧。唯一相同的是每个 "data group" 的变量数量和列名(在某种程度上,但没有模式。列名是项目的名称,而不是 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
中进行数据清理,这样如果我在 dat1
中删除列 x
,那么列 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
也会自动删除列 x
。
y z
1 6 12
2 7 13
3 8 14
4 9 15
5 10 16
有办法吗?我一直试图在 Whosebug 上搜索它,但找不到任何有用的东西。谢谢。
是这样的吗?
使用您发布的数据,它按预期工作。
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