提取比多列的最后一个值大10倍的元素

时间:2017-03-05 06:53:22

标签: r

我是新的R用户。 我有一个由50列和300行组成的数据帧。第一列表示ID,而第二列表示最后一列是特征的标准偏差(sd)。每列的合并的sd在最后一行显示。对于每一列,我想删除所有这些值比合并的sd大十倍。我想一次性完成这项工作。到目前为止,下面的脚本是我所知道的值是否大于合并的sd 。但是,即使正在处理ID(字符)(导致全部为FALSE)。如果我把raw_sd_summary [-1],我无法知道哪个特征在哪个特征上有我正在寻找的标准。

 logic_sd <- lapply(raw_sd_summary, function(x) x>tail(x,1) )
 logic_sd_df <- as.data.frame(logic_sd)

我该怎么办?我如何提取标记为TRUE(大于合并sd)的所有值,这些值是合并SD的十倍(以及相应的ID&#39;)?

1 个答案:

答案 0 :(得分:0)

我认为你的代码不会起作用,因为lapply会在data.frame的列上运行,而不是你想要的行。将其更改为

logic_sd <- apply(raw_sd_summary, 2, function(x) x>10*tail(x,1) )

这将为您提供一个超过最后一行10倍的逻辑数组。您可以通过替换第一列来恢复ID

logic_sd[,1]  <- raw_sd_summary[,1]

您可以通过

直接删除/替换原始表中不需要的值
raw_sd_summary[-300,-1][logic_sd[-300,-1]]<-NA    # or new value