R中的循环和grep函数

时间:2016-11-04 04:16:52

标签: r

我有一个名为“出勤”的变量,可跟踪一个人的每日出勤情况。如果它包含“a”,则该人在第一天出席,“b”如果该人出席第二天,如果该人出席第五天则一直到“e”。因此,如果他们分别参加前三天,最后三天或第一/第三/最后几天,那么有些人的出勤率看起来像“abc”或“cde”或“ace”。

现在我想创建一个变量“day_1”,如果“attendance”包含“a”则等于1,否则为0。然后变量“day_2”等于2,如果“出勤”包含“b”,否则为0。依此类推,直到“day_5”

我已尝试使用grep函数手动执行此操作。这是我到目前为止所尝试的:

    test <- data.frame(hhid = c(1:5),attendance=c("abc","bcd","d","ec","ade"))
    test$day_1 <- 0
    test$day_2 <- 0
    test$day_3 <- 0
    test$day_1[grep("a", test$attendance, "day_1")] <- "1"
    test$day_2[grep("b", test$attendance, "day_2")] <- "1"
    test$day_3[grep("c", test$attendance, "day_3")] <- "1"

在R中有更快的方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

由于您还没有共享任何样本数据,我创建了一个示例向量来为您提供一个想法。

test <- data.frame(hhid = c(1:5),attendance=c("abc","bcd","d","ec","ade"))
b = as.list(letters[1:5])

abc <- function(i){
  ifelse(grepl(b[[i]], test$attendance),1,0) 
}
m=sapply(seq_along(b), abc)
colnames(m)=paste("day",1:5,sep="_")
test <- cbind(test,m)