我在一个 Dataframe 中有两个逻辑向量:
df <- data.frame(log1 = c(FALSE, FALSE, TRUE, FALSE, TRUE), log2 = c(TRUE, FALSE, FALSE, FALSE, TRUE))
我想把这两个列合并成第三列。但是这个新列不应该仅仅包含逻辑值。相反,它应该为第三列分配三个值之一-“高”,“离群值”或“正常”。“高”优先,所以第三列应该显示“高”,而不是第5行的“离群值”。
我想使用if
和else
可以做到这一点,但我无法使用以下代码使其工作:
df$new <- NA
if(df$log1 == TRUE){
df$new <- "high"
} else if(df$log2 == TRUE) {
df$new <- "outlier"
} else {
df$new <- "normal"
}
有人能帮忙吗?
3条答案
按热度按时间jk9hmnmh1#
在没有
if
/else
的情况下尝试以下操作:**一个更好的解决方案:**试试这个:
t30tvxxf2#
这是关于
ifelse
及其衍生物的。base R
dplyr
我们可以嵌套
dplyr::if_else
,但嵌套通常鼓励我们使用case_when
。data.table
类似地,
fifelse
和fcase
:请注意,虽然上面的
dplyr::case_when
使用了与cond1 ~ value1, cond2 ~ value2
一样的波浪号公式,但fcase
变体使用了交替的参数cond1, value1, cond2, value2, ...)
。此外,
default=
参数只要是常量就可以工作。如果需要一个动态默认值(即基于表内容),则需要一个全真向量,如fcase(..., rep(TRUE, .N), NEWVALUE)
。monwx1rj3#
使用索引:
@r2evans指出的
data.table
解决方案是最快和最高效的内存。索引赢得了基础解决方案。基准: