通过将数值添加到每个观察值来突变数据框中的不同列

问题描述

我具有以下格式的数据框,(i)要选择包含字符串“ EH”的所有列,(ii)将值207添加到所选列中的每个观察值,(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 ...

解决方法

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

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)