R 语言如何找到数据框中每一行的最小值?针对这个问题,首先我们创建一个示例数据:
library(tidyverse) tibble(x = c(1, 2, 3), y = c(3, 1, 2), z = c(1, 2, 4)) -> df
|
行运算通常需要转换成长数据之后再进行分组运算:
df %>% mutate(id = row_number()) %>% gather(x:z, key = "key", value = "value") %>% group_by(id) %>% mutate(min = min(value, na.rm = T)) %>% spread(key, value)
|
不过 dplyr 包也提供了直接运行行运算的操作:
df %>% rowwise() %>% mutate(min = min(c(x, y, z))) %>% as_tibble()
|
要进行运算的变量比较多的时候也可以是有 c_across() 辅助:
df %>% rowwise() %>% mutate(min = min(c_across(x:z))) %>% as_tibble()
|
有时候我们希望生成的新列不是最小值,而是到底是哪个变量最小,可以这样:
df %>% mutate(id = row_number()) %>% gather(x:z, key = "key", value = "value") %>% group_by(id) %>% mutate(min = min(value, na.rm = T)) %>% mutate(mingroup = if_else(value == min, key, "")) %>% type_convert() %>% fill(mingroup, .direction = "updown") %>% spread(key, value)
|
这里第一行的 x 和 z 变量都是最小值,所以对应两行。
点击这里跳转到 RStata 短书平台获取附件:R 语言如何找到数据框中每一行的最小值?
评论