2016-09-28 28 views
1

我试图对R中的11列列表进行条件更改。我的条件始终是相同的survey$only0 == 1。我写了下面的代码:用sapply或R中的循环重复进行条件更改

survey$w.house[survey$only0 == 1] <- 1 
survey$w.inc[survey$only0 == 1] <- 1 
survey$w.jobs[survey$only0 == 1] <- 1 
survey$w.com[survey$only0 == 1] <- 1 
survey$w.edu[survey$only0 == 1] <- 1 
survey$w.env[survey$only0 == 1] <- 1 
survey$w.health[survey$only0 == 1] <- 1 
survey$w.satisf[survey$only0 == 1] <- 1 
survey$w.safe[survey$only0 == 1] <- 1 
survey$w.bal[survey$only0 == 1] <- 1 
survey$w.civic[survey$only0 == 1] <- 1 

我的代码工作很好,但我想缩短使用loop或函数我的代码为sapplylapply。有谁知道该怎么做?

谢谢你的帮助!

大卫

回答

2

我们可以通过感兴趣的列(“NM1”)循环使用lapply这样做容易,并且replace它到1的值,其中“only0”是1

survey[nm1] <- lapply(survey[nm1], function(x) replace(x, survey$only0==1, 1)) 

或者像@Vlo提到的匿名函数调用不需要

survey[nm1] <- lapply(survey[nm1], replace, list = survey$only0==1, values=1) 

其中

nm1 <- c("w.house", "w.inc", "w.jobs", "w.com", "w.edu", "w.env", 
    "w.health", "w.satisf", "w.safe", "w.bal", "w.civic") 
+3

可以删除匿名函数,因为索引是固定的。 – Vlo

+0

@Vlo是的,感谢您的评论 – akrun

+0

这正是我所期待的。谢谢 !!! –

0

你可以试试,

survey[survey$only0 == 1, cols] <- 1 

其中cols是要检查的条件列。

cols <- c("w.house", "w.inc", "w.jobs", "w.com", "w.edu", "w.env", 
      "w.health", "w.satisf", "w.safe", "w.bal", "w.civic")