r - 提取 R 中列的最高和最低值以及行标识符

标签 r dplyr

假设我有以下类型的一些数据:

df<-as.data.frame(matrix(rnorm(10*10000, 1, .5), ncol=10))

我想要一个保留 10 个原始列的新数据框,但每列仅保留最高 10 个和最低 10 个值。重要的是,行的名称与需要保留在新数据框中的 id 值相对应。

因此,最终结果 data.frame 的尺寸将是 m × 10,其中 m 很可能大于 20。但对于每一列,我只需要 20 个有效值。

我能想到的唯一方法是每列手动执行此操作,使用 dplyr 并排列,抓取顶部和底部行,然后从所有单独的向量创建一个矩阵。显然这是低效的。帮忙?

最佳答案

假设您想要保留原始数据集中的所有行,其中至少有一个值满足您的条件(给定列中十个最大或十个最小的值),您可以这样做:

# create a data frame
df<-as.data.frame(matrix(rnorm(10*10000, 1, .5), ncol=10))
# function to find lowes 10 and highest 10 values
lowHigh <- function(x)
{
        test <- x
        test[!(order(x) <= 10 | order(x) >= (length(x)- 10))] <- NA
        test
}
# apply the function defined above
test2 <- apply(df, 2, lowHigh)
# use the original rownames
rownames(test2) <- rownames(df)
# keep only rows where there is value of interest
finalData <- test2[apply(apply(test2, 2, is.na), 1, sum) < 10, ]

请注意,肯定有一些更聪明的方法来做到这一点......

关于r - 提取 R 中列的最高和最低值以及行标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009812/

相关文章:

r - 使用多个ID列和值列通过pivot_longer()简化gather()

r 结合 ggRadar 和 facet_wrap

r - 如何避免 expand = c(0,0) 裁剪轴刻度标签

r - 更改R中图形上的刻度线数量

r - 在 R 中更新数据集的最快方法是什么?

r - 理解 rowwise() 和 c_across()

在 mutate_each 或 summarise_each 之后以 'canonical' 的方式对列重新排序

r - dplyr 'rename' 标准评估函数没有按预期工作?

r - R中igraph网络中顶点的调色板

r - 使用 "any"函数跨多个列的逻辑函数