最小元素的行名

标签 r dataframe sorting

我有以下数据框:

d <- data.frame(a=c(1,2,3,4), b=c(20,19,18,17))
row.names(d) <- c("A", "B", "C", "D")

我想要另一个 data.frame,具有相同的列和 2 行,其中包含该列中 2 个最小元素的行名称。

在该示例中,预期结果为:

# Expected results
exp <- data.frame(a=c("A", "B"), b=c("C","D"))

最佳答案

我们使用lapply循环遍历列,对值进行排序,使用该索引对对应的row.names的n进行子集化'd' 的 ,并用 data.frame 包裹起来

n <- 2
data.frame(lapply(d, function(x) sort(head(row.names(d)[order(x)], n))))

-输出

#  a b
#1 A C
#2 B D

R 4.1.0 中,我们还可以使用 |> 运算符将函数与 \一起链接(按顺序应用以便于理解) (x) - 用于 base R

中的 lambda 函数
# //  ordered the column values
# // get corresponding row names
lapply(d, \(x) row.names(d)[order(x)] |>  
             head(n) |>  # // get the first n values
             sort()) |>  # // sort them
      data.frame() # // convert the list to data.frame
#  a b
#1 A C
#2 B D

或者使用dplyr

library(dplyr)
d %>% 
  summarise(across(everything(),
      ~ sort(head(row.names(d)[order(.)], n))))
#  a b
#1 A C
#2 B D

关于最小元素的行名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67655280/

相关文章:

r - 如何在R中将文本文件转换为数据帧?

python - 存在缺失值时对所有可能的组进行自定义分组

python - 各个月份的列值总和

javascript - ES6方式 - 按键从嵌套数组中获取唯一值

r - 如何在 RcppArmadillo 中复制随机抽奖?

r - 如何格式化具有指定精度级别的数字?

java - 字符串值时区排序

javascript排序和重新映射数组

r - 如何在 R 的 GA 包中的遗传算法函数中将变量设置为整数

r - 将列名添加到 dplyr 函数内的 vars()