如果满足条件则覆盖变量,否则保留现有值 R
Overwrite variables if condition is met, else keep existing values R
我有一个数据框
df<-data.frame(Name=c('H001', 'H002', 'H003', 'H004', 'H005', 'H006',
'H007', 'H008', 'H009', 'H010'),
Var1=c(1:10),
Var2=c(4,6,7,2,3,8,9,3,2,10),
Var3=c(1,0.7,0.5,0.74,0.84,0.8,0.13,0.7,0.34,0.4))
如果列 Var3 高于给定阈值,我想减少原始值,但如果它低于所述阈值,则保留原始值。我已经试过了,但这会导致 NAs:
df %>%
mutate(Var3 = case_when(
Name %in% c("H001", "H002") & Var3 >0.32 ~ 0.32,
Name %in% c("H003", "H004") & Var3 >0.22 ~ 0.32,
Name %in% c("H005", "H006") & Var3 >0.15 ~ 0.15,
Name %in% c("H007", "H008") & Var3 >0.18 ~ 0.18,
Name %in% c("H009", "H010") & Var3 >0.42 ~ 0.32,
))
有没有办法保留原始值而不是 NA?提前致谢
您可以在 case_when
的末尾添加一个最终的 else
语句,这样如果 none 其他条件得到满足,那么它将只是 return Var3
对于给定的行。默认情况下,return NA
如果 none 满足其他条件。
df %>%
mutate(Var3 = case_when(
Name %in% c("H001", "H002") & Var3 >0.32 ~ 0.32,
Name %in% c("H003", "H004") & Var3 >0.22 ~ 0.32,
Name %in% c("H005", "H006") & Var3 >0.15 ~ 0.15,
Name %in% c("H007", "H008") & Var3 >0.18 ~ 0.18,
Name %in% c("H009", "H010") & Var3 >0.42 ~ 0.32,
TRUE ~ Var3
))
输出
Name Var1 Var2 Var3
1 H001 1 4 0.32
2 H002 2 6 0.32
3 H003 3 7 0.32
4 H004 4 2 0.32
5 H005 5 3 0.15
6 H006 6 8 0.15
7 H007 7 9 0.13
8 H008 8 3 0.18
9 H009 9 2 0.34
10 H010 10 10 0.40
我有一个数据框
df<-data.frame(Name=c('H001', 'H002', 'H003', 'H004', 'H005', 'H006',
'H007', 'H008', 'H009', 'H010'),
Var1=c(1:10),
Var2=c(4,6,7,2,3,8,9,3,2,10),
Var3=c(1,0.7,0.5,0.74,0.84,0.8,0.13,0.7,0.34,0.4))
如果列 Var3 高于给定阈值,我想减少原始值,但如果它低于所述阈值,则保留原始值。我已经试过了,但这会导致 NAs:
df %>%
mutate(Var3 = case_when(
Name %in% c("H001", "H002") & Var3 >0.32 ~ 0.32,
Name %in% c("H003", "H004") & Var3 >0.22 ~ 0.32,
Name %in% c("H005", "H006") & Var3 >0.15 ~ 0.15,
Name %in% c("H007", "H008") & Var3 >0.18 ~ 0.18,
Name %in% c("H009", "H010") & Var3 >0.42 ~ 0.32,
))
有没有办法保留原始值而不是 NA?提前致谢
您可以在 case_when
的末尾添加一个最终的 else
语句,这样如果 none 其他条件得到满足,那么它将只是 return Var3
对于给定的行。默认情况下,return NA
如果 none 满足其他条件。
df %>%
mutate(Var3 = case_when(
Name %in% c("H001", "H002") & Var3 >0.32 ~ 0.32,
Name %in% c("H003", "H004") & Var3 >0.22 ~ 0.32,
Name %in% c("H005", "H006") & Var3 >0.15 ~ 0.15,
Name %in% c("H007", "H008") & Var3 >0.18 ~ 0.18,
Name %in% c("H009", "H010") & Var3 >0.42 ~ 0.32,
TRUE ~ Var3
))
输出
Name Var1 Var2 Var3
1 H001 1 4 0.32
2 H002 2 6 0.32
3 H003 3 7 0.32
4 H004 4 2 0.32
5 H005 5 3 0.15
6 H006 6 8 0.15
7 H007 7 9 0.13
8 H008 8 3 0.18
9 H009 9 2 0.34
10 H010 10 10 0.40