R 函数从数据框中提取前 n 个分数,并使用“apply”或 dplyr“rowwise”找到它们的平均值

Joh*_*hnJ 9 r dataframe dplyr

数据框看起来像这样

df = data.frame(name = c("A","B","C"),
               exam1 = c(2,6,4),
               exam2 = c(3,5,6),
               exam3 = c(5,3,3),
               exam4 = c(1,NA,5))
Run Code Online (Sandbox Code Playgroud)

我想提取每个“名字”的前 3 个考试成绩,并使用apply()或 dplyr rowwise()函数找到它们的平均值。

akr*_*run 6

使用apply, 使用MARGIN = 1, 循环遍历数字列上的行,sort, 获取head/tail依赖项decreasing = TRUE/FALSE并使用meanin返回base R

\n
apply(df[-1], 1, FUN = function(x) mean(head(sort(x, decreasing = TRUE), 3)))\n[1] 3.333333 4.666667 5.000000\n
Run Code Online (Sandbox Code Playgroud)\n
\n

或者与dplyr/rowwise

\n
library(dplyr)\ndf %>%\n  rowwise %>%\n  mutate(Mean = mean(head(sort(c_across(where(is.numeric)), \n       decreasing = TRUE), 3))) %>% \n  ungroup\n# A tibble: 3 \xc3\x97 6\n  name  exam1 exam2 exam3 exam4  Mean\n  <chr> <dbl> <dbl> <dbl> <dbl> <dbl>\n1 A         2     3     5     1  3.33\n2 B         6     5     3    NA  4.67\n3 C         4     6     3     5  5   \n
Run Code Online (Sandbox Code Playgroud)\n

  • 非常感谢大家的快速反应。 (2认同)