删除重复值超过30%或值超出均值+;-定义范围超过1%的列r中的2.5 SD

删除重复值超过30%或值超出均值+;-定义范围超过1%的列r中的2.5 SD,r,dataframe,conditional-statements,edit,R,Dataframe,Conditional Statements,Edit,也许这是关于数据编辑的一个基本问题,但我在堆栈溢出中没有发现类似的问题 我有一个约18行x 200列的数据帧。 这里是一个简化的玩具示例: DF编写一个函数,该函数包含要用于删除列的所有规则 remove_col <- function(x) { tab <- table(x) sd <- sd(x) mn <- mean(x) !(mean(x %in% names(tab[tab > 1])) > 0.3 || sum(

也许这是关于数据编辑的一个基本问题,但我在堆栈溢出中没有发现类似的问题

我有一个约18行x 200列的数据帧。 这里是一个简化的玩具示例:


DF编写一个函数,该函数包含要用于删除列的所有规则

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))
}


到目前为止,您尝试了什么?到目前为止,我有每行重复值的比例。i、 e dup_val=apply(DF,2,函数(x)sum(duplicated(x))/nrow(DF)),但我不知道如何根据此条件删除列。
我想删除所有重复值超过30%的列。
。如何定义重复值?有什么事情发生不止一次吗?是的,我想对每个“变量”或列进行质量控制,所以我对每个列都感兴趣。因此,我将重复值定义为在每列中出现多次的值。它工作得非常好。非常感谢!嗨,Ronak,我仔细检查了你的答案,我想知道是删除了超过1%的值超出+-2.5 SD范围的列,还是只是删除了值超出+-2.5 SD范围的列。你怎么认为?提前谢谢!它正在删除任何值超出范围的列。很抱歉我更正了答案,使其包含一个条件,即仅当超过1%的值超出范围时,才会删除该列。你现在能检查一下吗?是的,它现在工作了,再次感谢!
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