在R的dplyr中使用列索引而非列名进行突变操作

3

我在 R 中有以下数据框。我创建了一个名为“平均值”的新列,它取得了数据框中前三列的平均值,但我希望使用列索引(例如第2列,第3列和第4列)而非列名称。是否有一种方法可以做到这一点?

library(tidyverse)

data <- structure(list(Model = c("Adjusted Compnents Model", "ARIMA", 
"STIF Model"), `2021-11-30` = c(0.2, 0.1, 0.3), `2021-12-31` = c(0.2, 
0.3, 0), `2022-01-31` = c(0.2, 0.5, 0.3), `2022-02-28` = c(0.1, 
0.3, 0.1), `2022-03-31` = c(0.1, 0.2, 0.1), `2022-04-30` = c(0.2, 
0.1, 0.1)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L))

data %>% 
  mutate(Average = mean(`2021-11-30`:`2022-01-31`), .after = 4)

我不知道 .after 是 mutate 中的一个参数,所以这个问题帮助了我,谢谢! - Silentdevildoll
1个回答

3

我们可能需要使用rowMeans函数

library(dplyr)
data <- data %>%
  mutate(Average = rowMeans(across(`2021-11-30`:`2022-01-31`), 
      na.rm = TRUE), .after = 4)

-输出

data
# A tibble: 3 × 8
  Model                    `2021-11-30` `2021-12-31` `2022-01-31` Average `2022-02-28` `2022-03-31` `2022-04-30`
  <chr>                           <dbl>        <dbl>        <dbl>   <dbl>        <dbl>        <dbl>        <dbl>
1 Adjusted Compnents Model          0.2          0.2          0.2     0.2          0.1          0.1          0.2
2 ARIMA                             0.1          0.3          0.5     0.3          0.3          0.2          0.1
3 STIF Model                        0.3          0            0.3     0.2          0.1          0.1          0.1

关于索引,如果我们理解正确,我们可以替换范围内的值。

data %>%
  mutate(Average = rowMeans(across(2:4), 
      na.rm = TRUE), .after = 4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接