【发布时间】:2020-07-11 11:31:28
【问题描述】:
我正在使用大数据框 (df)。我想根据平均值 + 3 sd 计算特定列子集的异常值。
我首先提取了我想要的列,所以所有列的列名中都有颜色。
colors = colnames(df)[grep('color', colnames(df))]
我不确定我应该如何循环它以使用这个新变量计算所有列的异常值。我的公式是:
# id those with upper outliers
uthr = mean(df$color)+3*sd(df$color)
rm_u_ids = df$id[which(df$color >= uthr)]
# id those with lower outliers
lthr = mean(df$color)-3*sd(df$color)
rm_l_ids = df$id[which(df$color <= lthr)]
# remove those with both upper and lower outliers
rm_ids = sort(c(rm_u_ids, rm_l_ids))
df_2 = df %>% filter(!id %in% rm_ids)
现在,实际问题。
我想使用类似的东西来执行以下操作:
1) 对于colors 中的每种颜色,用异常值识别那些id,也许将此信息保存在其他地方,
2) 使用该信息(可能在列表或单独的数据框中),识别出现在 5 列或更多列中的 id,或 colors,
3) 使用此列表对原始数据框进行子集化,以便我们消除那些在 5 个颜色列或更多颜色列中具有异常值的 id。
这有意义吗?我不确定是否也建议针对此问题使用循环。
谢谢,如果我让它听起来比应该的更复杂,我很抱歉!
【问题讨论】:
标签: r loops for-loop subset outliers