通过向每个观察添加数值来改变数据框中的不同列

Mutate distinct columns in a data frame by adding a numeric value to each observation

我有一个以下格式的数据框,并且 (i) 想要 select 所有包含字符串“EH”的列,(ii) 将值 207 添加到 [=16] 中的每个观察值=]编辑列,(iii) 用新值覆盖列。

 NO            date_sub EH17.5a_sub EH17.5b_sub EH12.5a_sub EH12.5b_sub pH17.5_sub pH12.5_sub EH7.5a_sub EH7.5b_sub EH2.5a_sub EH2.5b_sub pH7.5_sub pH2.5_sub Temperature_sub RH_sub Voltage_sub
1  1 2020-06-24 19:00:00      118.67      289.40      198.79      341.28    6.76414    6.80436     358.17     342.98     369.71     171.23   6.79763   6.43233           23.98  39.22      12.353
2  2 2020-06-24 20:00:00       93.04      295.11      162.99      343.38    6.82978    6.87673     361.08     348.22     375.23     171.67   6.97362   6.51686           23.75  39.22      12.357
3  3 2020-06-24 21:00:00       76.67      298.83      142.24      344.17    6.96726    7.03494     362.60     352.05     379.18     172.32   7.20395   6.71439           23.78  39.25      12.353
4  4 2020-06-24 22:00:00       64.27      301.20      128.76      344.32    7.09183    7.17027     363.99     355.68     382.76     174.21   7.37294   6.88682           23.79  39.28      12.346
5  5 2020-06-24 23:00:00       54.24      302.77      117.72      344.28    7.19286    7.27350     364.77     358.63     385.63     176.38   7.49528   7.03470           23.78  39.34      12.346
6  6 2020-06-25 00:00:00       45.46      303.24      107.16      343.47    7.27001    7.34746     365.01     360.91     388.15     177.47   7.58073   7.15890           23.78  39.44      12.363

我尝试了以下方法,但有没有更简单的方法,因为我有包含数百列的数据框,我必须在其中添加值 207。

data_e <- data_e %>%
  mutate(EH17.5a_sub = EH17.5a_sub+207) %>%
  mutate(EH17.5b_sub = EH17.5b_sub+207) # and so on ...

您可以在 dplyr 中使用 across 将函数应用于多个列。

library(dplyr)
data_e <- data_e %>% mutate(across(contains("EH"), ~. + 207))
#Use `mutate_at` for `dplyr` < 1.0.0
#data_e <- data_e %>% mutate_at(vars(contains("EH")), ~. + 207)

或以 R 为基数:

cols <- grep('EH', names(data_e))
data_e[cols] <- data_e[cols] + 207

您可以使用 tidyverse 函数。 starts_with 会找到您需要的模式。

library(tidyverse)
data %>%
   mutate(new_variable = select(data, starts_with("EH")) + 207)