- 此问题在此处已有答案**:
Way to avoid nested ifelse statement in R(2个答案)
昨天关门了。
我想使用R在我的数据框中创建一个新列,该列的元素依赖于某个条件。例如,如果我的元素符合条件A,则分配的值将是A。如果我的元素符合条件B,则分配的值将是B。如果我的元素符合条件C,则分配的值将是C。
我知道如何用if_else结构为两个条件创建这样的结构,它允许说如果元素遵守条件A,那么它将具有值A,否则将具有值B。但是,我不知道如何为三个元素A、B、C这样做。
使用if,else if,else结构不起作用,因为它会给我错误"Error in if(condition){:条件的长度大于1 "因为我不能在条件中使用向量。
有没有人有办法在一般情况下解决这个问题?非常感谢!
2条答案
按热度按时间ffvjumwh1#
可以使用dplyr包中的case_when函数
dgsult0t2#
不知道什么对你不起作用,如果你愿意,你可以给我看你的代码,我会解释哪里出了问题。如果你给予更多的例子,你试图这样做会容易得多。
可以使用R中的ifelse()函数在数据框中创建一个新列,该列的元素取决于特定条件。条件、条件为真时分配的值以及条件为假时分配的值。
可以将多个ifelse()语句链接在一起来处理多个条件。例如,要处理三个条件A、B和C,可以执行以下操作:
第一个如果()将检查conditionA是否为真。如果为真,则将值“A”赋给新列。如果为假,则执行下一个ifelse()将检查conditionB是否为真。如果为真,则将值“B”赋给新列。如果为假,则执行下一个ifelse()将检查conditionC是否为真。如果为真,则将值“C”赋给新列。如果为假,则将值“Other”赋给新列。
您也可以使用dplyr包中的case_when()函数作为基于多个条件创建新列的替代方法。例如:
也可以使用R中的cut()函数基于多个条件创建新列。
您需要创建一个间隔向量以及将分配给这些间隔的值。例如:
它将创建一个新列new_column,该列将值“A”赋给column column中1到5之间的元素,将值“B”赋给5到10之间的元素,将值“C”赋给大于10的元素。
希望这能有所帮助!如果你有其他问题,请告诉我。