我是新的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;)?
答案 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