我正在尝试向我的数据框中添加新列(x_new
),这取决于“定义”列中给出的值。定义列x_definition
包含以下记录类型之一:-一个常数-描述所需操作的字符串-NA
我希望结果列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 ) )
解决这个问题的合适程序是什么?
我正在尝试向我的数据框添加一个新列(x_new),该列取决于'definition'列中给出的值。定义列x_definition包含以下记录类型之一:-A ...
我认为case_when
正是您想要的。