更新时间:2023-09-18 20:05:34
Test2<- Test %>%
dplyr::select(starts_with("Test"))%>%
mutate_all(function(x){x %in% c("DF60","DF61","DF62","DF63")})%>%
mutate(out = ifelse(rowSums(.)<1,0,1))
评论后调整
如果要保留其他列,则由yutannihilation提出的mutate_at要好得多.然后,问题就变成了在选择列时对rowums进行突变.不知道下一件事是否是***实践,但它能奏效(对我之前的问题进行了重新解答:
If you want to keep other columns, mutate_at, as is proposed by yutannihilation, is far better. The problem then becomes doing the rowsums in mutate on a selection of the columns. No idea if the next thing is best practice, but it works (reworked an answer on a previous question of mine: dplyr mutate on column subset (one function on all these columns combined))
library(tidyverse)
library(anomalyDetection)
Test1<-c("DF64", "DF63", "DF89", "DF30", "DF70")
Test2<-c("DF61", "DF25", "DF00", "DF30", "DF99")
Test3<-c("DF80", "DF63", "DF60", "DF63", "DF70")
Test<-data.frame(Test1, Test2, Test3)
Test$ExtraCol<-LETTERS[1:5]
Test2<- Test %>%
mutate_at(vars(starts_with("Test")),funs(bin=.%in% c("DF60","DF61","DF62","DF63")))%>%
split(.,1<10)%>%
map_df(~mutate(.,out=rowSums(.[paste0("Test",1:3,"_bin")])>0))
Test1 Test2 Test3 ExtraCol Test1_bin Test2_bin Test3_bin out
DF64 DF61 DF80 A FALSE TRUE FALSE TRUE
DF63 DF25 DF63 B TRUE FALSE TRUE TRUE
DF89 DF00 DF60 C FALSE FALSE TRUE TRUE
DF30 DF30 DF63 D FALSE FALSE TRUE TRUE
DF70 DF99 DF70 E FALSE FALSE FALSE FALSE