r-选择一组列,评估每个单元格,根据评估创建新变量,使用dplyr附加到数据集



我有一个数据帧,我想从中选择几列,然后逐行检查这些列是否都大于3。这部分正在工作。

然后我想创建一个1/0标志来表示这个条件为真,然后将其添加回FULL数据集。我可以用dplyr做任何事情,直到我不得不使用cbind()来添加新变量。有dpylr的方法吗?

代码如下:

vars=as.character(paste("sect4q",letters[c(1,4,5,6:16)],sep=""))
fsurv=structure(list(surveyid = 41:44, ID = c(90002, 90078, 90097, 
90120), sect4qa = c(4, 5, 4, 4), sect4qb = c(4, 5, 3, 5), sect4qc = c(4, 
5, 3, 5), sect4qd = c(4, 5, 5, 5), sect4qe = c(4, 5, 3, 5), sect4qf = c(4, 
5, 4, 4), sect4qg = c(5, 5, 5, 5), sect4qh = c(2, 4, 4, 4), sect4qi = c(4, 
4, 4, 4), sect4qj = c(2, 4, 4, 3), sect4qk = c(4, 5, 4, 5), sect4ql = c(4, 
5, 3, 5), sect4qm = c(4, 5, 5, 5), sect4qn = c(4, 5, 4, 5), sect4qo = c(4, 
5, 4, 4), sect4qp = c(4, 5, 4, 5)),.Names = c("surveyid", "ID", "sect4qa", "sect4qb", "sect4qc","sect4qd","sect4qe", "sect4qf", "sect4qg", "sect4qh", "sect4qi", "sect4qj", "sect4qk", "sect4ql", "sect4qm", "sect4qn", "sect4qo", "sect4qp"), class = "data.frame", row.names =c(NA, 4L))
fsurv2= fsurv %>%
select(one_of(vars)) %>%
transmute(fall.flourisher=ifelse(!rowSums(. < 4),1,0))
fsurv=cbind(fsurv,fsurv2)

我自己找到了dply解决方案。以下代码解决了这个问题:

fsurv %>%
mutate(fall.flourisher=ifelse(!rowSums(select(.,one_of(vars)) < 4),1,0))

最新更新