R 数据分解的 ifelse 函数
ifelse function for R data factoring
我有一个如下所示的数据框:
name
pos1
pos2
pos3
A
0.56
0.2
0.24
B
NA
0.72
0.1
C
NA
NA
NA
D
0.1
0.02
0.1
列表继续到 ~500 行。
在预测数据集中,我想将 TRUE 设置为 any 位置的数字大于 0.5。我真的不在乎它是否包含 NA,我只需要知道它至少有一个值 >0.5 的位置。
但是,我真的不需要所有位置都有 NA 的行。
我目前的代码是:
PRED <- factor (rep(ifelse(data$pos1 > 0.500 | data$pos2 > 0.500 |
data$pos3 > 0.500 ,
TRUE, FALSE)))
当我尝试这段代码时,它在正确检测真/假时完成了工作,但对于具有 1 / 2 NA 的行,它一直将其分解为 NA(而不是 T 或 F)。
我需要对当前代码进行哪些更改才能实现此目的?
这样只有当所有三个位置都是 NA 时才能获得 NA 输出。
非常感谢任何帮助!
df [2:4] %>%
apply(1,function(x) any(x[1]>0.5,x[2]>0.5,x[3]>0.5,na.rm = T)) %>%
cbind(df)
这不是一个优雅的解决方案,但您可以使用 dplyr 包中的 case_when()
data <-
data.frame(Name = LETTERS[1:5],
pos1 = c(5,0.22,NA,0,NA),
pos2 = c(0.2,NA,1,0,NA),
pos3 = c(NA,0.1,0.3,0.1,NA))
library(dplyr)
data <- data %>%
mutate(PRED = factor(case_when(pos1 > 0.500 ~ TRUE,
pos2 > 0.500 ~ TRUE,
pos3 > 0.500 ~ TRUE,
is.na(pos1) & is.na(pos2) & is.na(pos3) ~ NA,
TRUE ~ FALSE)))
这将在新列中生成因子
> data$PRED
[1] TRUE FALSE TRUE FALSE <NA>
Levels: FALSE TRUE
我有一个如下所示的数据框:
name | pos1 | pos2 | pos3 |
---|---|---|---|
A | 0.56 | 0.2 | 0.24 |
B | NA | 0.72 | 0.1 |
C | NA | NA | NA |
D | 0.1 | 0.02 | 0.1 |
列表继续到 ~500 行。
在预测数据集中,我想将 TRUE 设置为 any 位置的数字大于 0.5。我真的不在乎它是否包含 NA,我只需要知道它至少有一个值 >0.5 的位置。
但是,我真的不需要所有位置都有 NA 的行。
我目前的代码是:
PRED <- factor (rep(ifelse(data$pos1 > 0.500 | data$pos2 > 0.500 |
data$pos3 > 0.500 ,
TRUE, FALSE)))
当我尝试这段代码时,它在正确检测真/假时完成了工作,但对于具有 1 / 2 NA 的行,它一直将其分解为 NA(而不是 T 或 F)。
我需要对当前代码进行哪些更改才能实现此目的? 这样只有当所有三个位置都是 NA 时才能获得 NA 输出。
非常感谢任何帮助!
df [2:4] %>%
apply(1,function(x) any(x[1]>0.5,x[2]>0.5,x[3]>0.5,na.rm = T)) %>%
cbind(df)
这不是一个优雅的解决方案,但您可以使用 dplyr 包中的 case_when()
data <-
data.frame(Name = LETTERS[1:5],
pos1 = c(5,0.22,NA,0,NA),
pos2 = c(0.2,NA,1,0,NA),
pos3 = c(NA,0.1,0.3,0.1,NA))
library(dplyr)
data <- data %>%
mutate(PRED = factor(case_when(pos1 > 0.500 ~ TRUE,
pos2 > 0.500 ~ TRUE,
pos3 > 0.500 ~ TRUE,
is.na(pos1) & is.na(pos2) & is.na(pos3) ~ NA,
TRUE ~ FALSE)))
这将在新列中生成因子
> data$PRED
[1] TRUE FALSE TRUE FALSE <NA>
Levels: FALSE TRUE