【发布时间】:2023-01-11 00:56:53
【问题描述】:
我有一个带有两个变量的数据框df,df$soil 和df$use。我想根据条件向我的数据集添加两个新变量 df$ef1 和 df$ef2。我正在使用“case_when”执行此操作:
ef1_grassl_mineral <- 0.2
ef1_grassl_peat <- 0.3
ef1_arable_mineral <- 0.4
ef1_arable_peat <- 0.5
ef2_grassl_mineral <- 2.3
ef2_grassl_peat <- 3.4
ef2_arable_mineral <- 4.5
ef2_arable_peat <- 5.6
df <- data.frame(soil = c('mineral', 'peat', 'mineral', 'peat'),
use = c('grassl', 'arable', 'arable', 'grassl'))
df <- df %>% mutate (
ef1 = case_when((soil=='mineral' & use=='grassl') ~ ef1_grassl_mineral,
(soil=='peat' & use=='grassl') ~ ef1_grassl_peat,
(soil=='mineral' & use=='arable') ~ ef1_arable_mineral,
(soil=='peat' & use=='arable') ~ ef1_arable_peat),
ef2 = case_when((soil=='mineral' & use=='grassl') ~ ef2_grassl_mineral,
(soil=='peat' & use=='grassl') ~ ef2_grassl_peat,
(soil=='mineral' & use=='arable') ~ ef2_arable_mineral,
(soil=='peat' & use=='arable') ~ ef2_arable_peat))
以上工作正常,但我必须为每个变量重复条件,这使得代码冗长。
因此,我想知道是否有一种方法可以仅指定一次条件(例如,soil=='mineral' & use=='arable'),然后同时定义df$ef1和df$ef2。(语法:IF (soil=='mineral' & use=='可耕地') 然后 ef1=ef1_arable_mineral 和 ef2=ef2_arable_mineral )
【问题讨论】: