【发布时间】:2019-11-08 15:49:56
【问题描述】:
我正在尝试向我的数据框中添加一个新列 (x_new),该列取决于“定义”列中给出的值。定义列 x_definition 包含以下记录类型之一:
- 一个常数
- 描述所需操作的字符串
- 不适用
我希望生成的列 x_new 如下所示:
- 如果 x_definition 是 NA,那么 x_new 仍然是 NA。
- 如果x_definition 是一个字符串,那么它需要一定的计算。例如,如果它是'equal_to_z',那么结果应该是z,或者如果它的'third_of_z',那么x_new 应该是z/3。除了这些定义之外,还有更多的定义表明需要更复杂的 z 函数。
- 如果x_definition 是任何数字,那么x_new 应该就是那个数字。
我编写了以下代码来处理这些情况,但它是一组繁琐的嵌套ifelse 语句。我正在寻找一种方法,
data <- data %>% mutate(x_new = ifelse(
is.na(x_definition), NA, ifelse(
x_definition=='equal_to_z', z, ifelse(
x_definition=='third_of_z', z/3, NA
)
)
)
)
我也考虑过使用switch,但遇到了我不知道如何说“如果是数字,请保留为数字”的问题
a <- data %>% mutate(x_new = switch(x_definition,
'equal_to_z' = z,
'third_of_z' = z / 3,
<number???> = x_definition
)
)
解决这个问题的适当流程是什么?
【问题讨论】:
标签: r dataframe if-statement switch-statement