【问题标题】:Repeated conditional change with sapply or a loop in R使用 sapply 或 R 中的循环重复条件更改
【发布时间】:2016-09-28 15:13:55
【问题描述】:

我正在尝试对 R 中的 11 列列表进行条件更改。我的条件始终相同 survey$only0 == 1。我写了以下代码:

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

我的代码运行良好,但我想使用loopsapplylapply 等函数来缩短我的代码。有人知道怎么做吗?

感谢您的帮助!

大卫

【问题讨论】:

    标签: r loops lapply sapply


    【解决方案1】:

    我们可以使用 lapply 轻松完成此操作,方法是遍历感兴趣的列 ('nm1'),然后 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")
    

    【讨论】:

    • 可以移除匿名函数,因为索引是固定的。
    【解决方案2】:

    你可以试试,

    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")
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2013-07-29
      • 2016-08-18
      相关资源
      最近更新 更多