通过向每个观察添加数值来改变数据框中的不同列
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)
我有一个以下格式的数据框,并且 (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)