我正在尝试根据多个条件替换多列:
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,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))
谢谢!
答案 0 :(得分:1)
试试这个:
test %>%
mutate(substart = ifelse(value <= -1 & is.na(substart),start,substart),
subend = ifelse(value <= -1 & is.na(subend),end,subend))
答案 1 :(得分:1)
这是一个使用 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,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