2016-09-28 29 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")