根据其他列的if-else评估在data.frame中创建新列

问题描述 投票:0回答:1

我正在尝试向我的数据框中添加新列(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 ...

r dataframe if-statement switch-statement
1个回答
0
投票

我认为case_when正是您想要的。

© www.soinside.com 2019 - 2024. All rights reserved.