我想插入列Coins/Copay
并根据5个条件指定值1,0:
Coins
金额,但是NA Copay
- > Coins/Copay
= 1 Copay
金额,但是NA Coins
- > Coins/Copay
= 0 Coins
和Copay
金额= 0 - > Coins/Copay
= 0 Coins
和Copay
金额,但Copay
不= 0 - > Coins/Copay
= 0 Coins
大于Copay
且Copay
= 0 - > Coins/Copay
= 1 使用以下数据集:
Plans Coins Copay
A 0 NA
B 0 NA
C 10 NA
D NA 0
E NA 50
F 0 0
G 20 10
H 40 5
I 20 0
J 5 0
我希望结果是:
Plans Coins Copay Coins/Copay
A 0 NA 1
B 0 NA 1
C 10 NA 1
D NA 0 0
E NA 50 0
F 0 0 0
G 20 10 0
H 40 5 0
I 20 0 1
J 5 0 1
对不起,如果这令人困惑!非常感谢您的帮助。
答案 0 :(得分:1)
您实际上只需要指定Coins.Copay == 1
个案例,其余的默认为0
。
library(tidyverse);
df %>%
mutate(Coins.Copay = case_when(
Plans %in% c("A", "B", "C") & !is.na(Coins) & is.na(Copay) ~ 1,
Plans %in% c("I", "J") & Coins > Copay & Copay == 0 ~ 1,
TRUE ~ 0
))
# Plans Coins Copay Coins.Copay
#1 A 0 NA 1
#2 B 0 NA 1
#3 C 10 NA 1
#4 D NA 0 0
#5 E NA 50 0
#6 F 0 0 0
#7 G 20 10 0
#8 H 40 5 0
#9 I 20 0 1
#10 J 5 0 1
答案 1 :(得分:0)
使用case_when
包中的dplyr
:
df$`Coins/Copay` <- case_when(
df$Plans %in% c('A', 'B', 'C') & !is.na(df$Coins) & is.na(df$Copay) ~ 1,
df$Plans %in% c('D', 'E') & is.na(df$Coins) & !is.na(df$Copay) ~ 0,
df$Plans = 'F' & df$Coins == 0 & df$Copay == 0 ~ 0,
df$Plans %in% c('G', 'H') & !is.na(df$Coins) & !is.na(df$Copay)
& df$Copy != 0 ~ 0,
df$Plans %in% c('I', 'J') & df$Coins > df$Copay & df$Copy = 0 ~ 1
TRUE ~ 0 # default value is zero
)
答案 2 :(得分:0)
我不确定我是否正在阅读你的第五个条件,但是如果你的意思是当Copay == 0&amp;时,CoinsCopay应该是1硬币不是NA或0,你可以用基数R:
df$CoinsCopay <- ifelse((!is.na(df$Coins) & is.na(df$Copay)) | (!df$Coins %in% c(0,NA) & df$Copay %in% 0), 1, 0)
> df
Plans Coins Copay CoinsCopay
1 A 0 NA 1
2 B 0 NA 1
3 C 10 NA 1
4 D NA 0 0
5 E NA 50 0
6 F 0 0 0
7 G 20 10 0
8 H 40 5 0
9 I 20 0 1
10 J 5 0 1