【问题标题】:Extract elements 10x greater than the last values for multiple columns提取比多列的最后一个值大 10 倍的元素
【发布时间】:2017-03-05 16:19:33
【问题描述】:

我是新的 R 用户。 我有一个由 50 列和 300 行组成的数据框。第一列表示 ID,而直到最后一列的第二列是特征的标准差 (sd)。每列的池化 sd 显示在最后一行。对于每一列,我想删除所有那些比池化 sd 大十倍的值。我想一口气做到这一点。到目前为止,下面的脚本是我为了解值是否大于池化 sd 而提出的。但是,即使是 ID(字符)也在处理中(导致全部为 FALSE)。如果我输入 raw_sd_summary[-1],我无法知道哪个特征上的哪个 ID 具有我正在寻找的标准。

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

我该怎么办?以及如何提取所有标记为 TRUE(大于 pooled sd)比 pooled SD 大 10 倍(以及它们相应的 ID)的值?

【问题讨论】:

  • 我们是否要完全删除任何元素不符合此标准的所有行?此外,您可以创建一个模拟数据框进行演示:set.seed(24); df&lt;- data.frame(id=1:10,a= floor(runif(n = 10, 1,100)), b= floor(runif(n = 10, 1,100)))

标签: r


【解决方案1】:

我认为您的代码将无法运行,因为 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

【讨论】:

  • 我试过了,但输出是 ID 下的所有行都是“FALSE”,而特征列下的所有行都是“NA”:(
  • 需要查看您正在运行的代码以了解问题所在... logic_sd 是否正确?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
  • 2010-11-13
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多