删除超过 30% 的重复值或超过 1% 的值超出由 r 中的平均值 +- 2.5 SD 定义的范围的列
Delete columns that had more than 30% of repeated values or more than 1% of values outside the range defined by the mean +- 2.5 SD in r
可能是data edition的基础问题,但是我在stack overflow中没有找到类似的问答。
我有一个大约 18 行 x 200 列的数据框。
这是一个简化的玩具示例:
DF <- data.frame(x1=c(0.1,1,0.7,765,0.4,0.3,0.5,3.6,5,11), x2=c(2,2,6,7,6,6,4,2,2,2), x3=c(4,2,3,4,5,4.2,4.6,2.2,2.7,2.8))
我想删除重复值超过 30% 的所有列,在本例中为 x2 列。在玩具示例中,由于有超过 30% 的重复值(许多重复的 2 和 6),应被删除。
我还想删除超过 1% 的值超出平均值 +- 2.5 SD 定义的范围的列。在玩具示例中,应删除列 x1,因为 SD sqrt(var(DF$x1))
= 241.14 且平均值 mean(DF$x1)
= 78.76,因此平均值 + 2.5 SD = 78.76 + (2.5*241.14) = 681.61,而在DF$x1中有一个比这个大的值,代表DF$x1
中值的10%(由于table中只有十行)
编写一个函数,其中包含要用于删除列的所有规则。
remove_col <- function(x) {
tab <- table(x)
sd <- sd(x)
mn <- mean(x)
!(mean(x %in% names(tab[tab > 1])) > 0.3 ||
sum(x > mn + 2.5 * sd | x < mn - 2.5 * sd) > 0.01*length(x))
}
与Filter
一起使用。
Filter(remove_col, DF)
# x3
#1 4.0
#2 2.0
#3 3.0
#4 4.0
#5 5.0
#6 4.2
#7 4.6
#8 2.2
#9 2.7
#10 2.8
可能是data edition的基础问题,但是我在stack overflow中没有找到类似的问答。
我有一个大约 18 行 x 200 列的数据框。 这是一个简化的玩具示例:
DF <- data.frame(x1=c(0.1,1,0.7,765,0.4,0.3,0.5,3.6,5,11), x2=c(2,2,6,7,6,6,4,2,2,2), x3=c(4,2,3,4,5,4.2,4.6,2.2,2.7,2.8))
我想删除重复值超过 30% 的所有列,在本例中为 x2 列。在玩具示例中,由于有超过 30% 的重复值(许多重复的 2 和 6),应被删除。
我还想删除超过 1% 的值超出平均值 +- 2.5 SD 定义的范围的列。在玩具示例中,应删除列 x1,因为 SD sqrt(var(DF$x1))
= 241.14 且平均值 mean(DF$x1)
= 78.76,因此平均值 + 2.5 SD = 78.76 + (2.5*241.14) = 681.61,而在DF$x1中有一个比这个大的值,代表DF$x1
中值的10%(由于table中只有十行)
编写一个函数,其中包含要用于删除列的所有规则。
remove_col <- function(x) {
tab <- table(x)
sd <- sd(x)
mn <- mean(x)
!(mean(x %in% names(tab[tab > 1])) > 0.3 ||
sum(x > mn + 2.5 * sd | x < mn - 2.5 * sd) > 0.01*length(x))
}
与Filter
一起使用。
Filter(remove_col, DF)
# x3
#1 4.0
#2 2.0
#3 3.0
#4 4.0
#5 5.0
#6 4.2
#7 4.6
#8 2.2
#9 2.7
#10 2.8