在数据框中应用列表条件块
Apply block of list condition in dataframe
我正在尝试对现有数据框应用一些新条件(如下所示)。我不能使用 ifelse
因为逻辑是这样的:
- 如果计数<=3:保持原样
- 如果计数>3 :
- If Code != "OFF15", c = "OK10" else c = "OFF15"
- 如果计数 > 3 且代码为 NA:代码=“OK10”
使用ifelse时无法生成第三个条件
Code = c("OFF15","OFF5",NA,"OFF5",NA)
count= c(3,4,4,2,1)
x= data.frame(Code,count)
我无法使用 ifelse,因为它有嵌套列表。我的预期是:
Code Count
OFF15 3
OK10 2
OK10 3
OFF5 2
NA 1
您可以使用 dplyr
:
library(dplyr)
df %>%
mutate(Code = case_when(count < 3 ~ Code,
count > 3 & Code != "OFF15" ~ "OK10",
TRUE ~ "OFF15"))
这个returns
Code count
1 OFF15 3
2 OK10 4
3 OFF15 3
4 OFF5 2
5 <NA> 1
注意:我将 data.frame 命名为 df
而不是 x
。
我们可以使用嵌套的ifelse
s(只有一层嵌套仍然可以,否则case_when
几乎是必须的)。
library(dplyr)
df %>% mutate(Code = ifelse(count<=3, Code, ifelse(!Code %in% "OFF15", "OK10", "OFF15"))
使用 data.table
中的 fcase
library(data.table)
setDT(x)[, Code := fcase(count < 3, Code, count > 3 & Code != "OFF15",
"OK10", default = "OFF15")]
x
Code count
1: OFF15 3
2: OK10 4
3: OFF15 4
4: OFF5 2
5: <NA> 1
我正在尝试对现有数据框应用一些新条件(如下所示)。我不能使用 ifelse
因为逻辑是这样的:
- 如果计数<=3:保持原样
- 如果计数>3 :
- If Code != "OFF15", c = "OK10" else c = "OFF15"
- 如果计数 > 3 且代码为 NA:代码=“OK10”
使用ifelse时无法生成第三个条件
Code = c("OFF15","OFF5",NA,"OFF5",NA)
count= c(3,4,4,2,1)
x= data.frame(Code,count)
我无法使用 ifelse,因为它有嵌套列表。我的预期是:
Code Count
OFF15 3
OK10 2
OK10 3
OFF5 2
NA 1
您可以使用 dplyr
:
library(dplyr)
df %>%
mutate(Code = case_when(count < 3 ~ Code,
count > 3 & Code != "OFF15" ~ "OK10",
TRUE ~ "OFF15"))
这个returns
Code count
1 OFF15 3
2 OK10 4
3 OFF15 3
4 OFF5 2
5 <NA> 1
注意:我将 data.frame 命名为 df
而不是 x
。
我们可以使用嵌套的ifelse
s(只有一层嵌套仍然可以,否则case_when
几乎是必须的)。
library(dplyr)
df %>% mutate(Code = ifelse(count<=3, Code, ifelse(!Code %in% "OFF15", "OK10", "OFF15"))
使用 data.table
fcase
library(data.table)
setDT(x)[, Code := fcase(count < 3, Code, count > 3 & Code != "OFF15",
"OK10", default = "OFF15")]
x
Code count
1: OFF15 3
2: OK10 4
3: OFF15 4
4: OFF5 2
5: <NA> 1