如何解决R根据多个条件替换多列
我正在尝试根据多个条件替换多列:
test=data.frame(
start=c(1,100,1000,10000),end=c(10,110,1010,10010),value=c(-1.2,-1.5,-1.02,-0.5),substart=c(2,102,NA,NA),subend=c(8,108,NA)
)
If value is <= -1 and substart == NA :
I want that : substart = start and subend = end
这是所需的输出:
start end value substart subend
1 10 -1.20 2 8
100 110 -1.50 102 108
1000 1010 -1.02 1000 1010
10000 10010 -0.50 NA NA
我正在尝试使用 dplyr,但我没有得到我想要的,而且如果我可以在一个命令中全部更改它们会更好
test %>%
mutate(substart=replace_na(substart,(value<=-1 & substart =='NA'),start))
谢谢!
解决方法
试试这个:
test %>%
mutate(substart = ifelse(value <= -1 & is.na(substart),start,substart),subend = ifelse(value <= -1 & is.na(subend),end,subend))
,
这是一个使用 case_when()
中的 dplyr
的版本,它可以处理多个条件,尽管这里只显示了 OP 要求的单个条件:
library(dplyr)
testdf <- data.frame(
start=c(1,100,1000,10000),end=c(10,110,1010,10010),value=c(-1.2,-1.5,-1.02,-0.5),substart=c(2,102,NA,NA),subend=c(8,108,NA)
)
testdf %>%
mutate(substart=case_when(value <= -1 & is.na(substart) ~ start,TRUE ~ substart),subend=case_when(value <= -1 & is.na(subend) ~ end,TRUE ~ subend))
具有所需输出:
start end value substart subend
1 1 10 -1.20 2 8
2 100 110 -1.50 102 108
3 1000 1010 -1.02 1000 1010
4 10000 10010 -0.50 NA NA
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。