数据框看起来像这样
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()函数找到它们的平均值。
使用apply, 使用MARGIN = 1, 循环遍历数字列上的行,sort, 获取head/tail依赖项decreasing = TRUE/FALSE并使用meanin返回base R
apply(df[-1], 1, FUN = function(x) mean(head(sort(x, decreasing = TRUE), 3)))\n[1] 3.333333 4.666667 5.000000\nRun Code Online (Sandbox Code Playgroud)\n或者与dplyr/rowwise
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 \nRun Code Online (Sandbox Code Playgroud)\n