【发布时间】:2018-05-14 20:03:07
【问题描述】:
我有一个名为“jobdata”的数据集
names <- c("person1", "person2", "person3")
job1_1_sector <- c("Private", "Public", "Private")
job2_1_sector <- c(NA, "Public", "Private")
job2_2_sector <- c("Private", "Public", "Other")
job3_1_sector <- c("Private", "Private", "Private")
job3_2_sector <- c("Other", "Public", "Other")
job3_3_sector <- c("Private", NA, "Private")
jobs <- cbind(job1_1_sector, job2_1_sector, job2_2_sector, job3_1_sector,
job3_2_sector, job3_3_sector )
jobdata <- data.frame(names, jobs)
如果出现 Private 一词,我想创建一个新的二进制变量 private,如果跨相关变量(即 job[123]_[123]_sector)则等于 1。然后是Public 的另一个,Other 的另一个。我已经想出了如何将它与 ifelse 和 grepl 一起使用,但看起来我的代码行真的很长。有没有更简单的方法来做到这一点?
下面的这段代码给了我想要的代码:
jobdata$private <- ifelse(grepl("Private", jobdata$job1_1_sector) | grepl("Private", jobdata$job2_1_sector) | grepl("Private", jobdata$job2_2_sector) | grepl("Private", jobdata$job3_1_sector) | grepl("Private", jobdata$job3_2_sector) | grepl("Private", jobdata$job3_3_sector), 1, 0)
jobdata$public <- ifelse(grepl("Public", jobdata$job1_1_sector) | grepl("Public", jobdata$job2_1_sector) | grepl("Public", jobdata$job2_2_sector) | grepl("Public", jobdata$job3_1_sector) | grepl("Public", jobdata$job3_2_sector) | grepl("Public", jobdata$job3_3_sector), 1, 0)
jobdata$other <- ifelse(grepl("Other", jobdata$job1_1_sector) | grepl("Other", jobdata$job2_1_sector) | grepl("Other", jobdata$job2_2_sector) | grepl("Other", jobdata$job3_1_sector) | grepl("Other", jobdata$job3_2_sector) | grepl("Other", jobdata$job3_3_sector), 1, 0)
谢谢!
【问题讨论】:
-
t(outer(c("Private","Public","Other"),do.call(paste,jobdata),Vectorize(grepl)))+0
标签: r