#r
Вопрос:
У меня есть набор данных, который выглядит так:
a | b | c |
---|---|---|
24 | 35 | 76 |
27 | 12 | 43 |
29 | 76 | 56 |
34 | 54 | 52 |
76 | NA | NA |
Я хочу рассчитать ранги (используя rank()
функцию) для всех 3 сразу. Я думаю apply()
, что семья, возможно, будет работать здесь? Или мне было бы лучше с циклом for, так как я перебираю столбцы.
Ответ №1:
Мы можем использовать lapply
или sapply
df2 <- df1
df2[] <- lapply(df1, rank)
Или мы можем использовать dplyr
library(dplyr)
df %>%
mutate(across(everything(), rank))
данные
df1 <- structure(list(a = c(24L, 27L, 29L, 34L, 76L), b = c(35L, 12L,
76L, 54L, NA), c = c(76L, 43L, 56L, 52L, NA)), class = "data.frame",
row.names = c(NA,
-5L))
Ответ №2:
Вы можете использовать ответ Tidyverse на apply
семейство функций ( map
). Они работают аналогично apply
семейству, но имеют более явное возвращаемое значение, что полезно. Например:
library(purrr)
map_df(df, rank)
Это вернет tibble (data.frame), который вам нужен.
Конечно, вы также можете сделать следующее, если вам нужно базовое решение R:
as.data.frame(lapply(df, rank))