【问题标题】:sapply in R - how to solve this without looping [closed]R中的sapply - 如何在不循环的情况下解决这个问题[关闭]
【发布时间】:2017-04-06 05:23:27
【问题描述】:

如何使用 sapply?我的数据框中有 40 万条记录。数据需要填充到 b$a1 而不使用 for 循环。

b <- a
b[1:100,]
for (i in 1:nrow(b)) {
    if (b`$`x[i] > mean(b`$`x) &
        b`$`y[i] > mean(b`$`y) &
        b`$`z[i] < mean(b`$`z))
    {
        b`$`a1[i] = '1'
    }
    else {
        b`$`a1[i] = '0'
    }
}
head(b)

【问题讨论】:

    标签: r lapply sapply mapply


    【解决方案1】:

    我想你可以在这里使用ifelse()

    b$a1 <- ifelse(b$x > mean(b$x) & b$y > mean(b$y) & b$z > mean(b$z), 1, 0)
    

    Akrun 的更新:

    b$a1 <- as.integer(b$x > mean(b$x) & b$y > mean(b$y) & b$z > mean(b$z))
    

    【讨论】:

    • 代码高尔夫 - rowSums(b &gt; t(colMeans(b)))==ncol(b) 甚至 Reduce(`&amp;`,Map(`&gt;`,b,colMeans(b)))
    • @thelatemail 但是这不是假设b 中只有三列吗?
    • @TimBiegeleisen - 是的,但这可以很容易地调整 - 如果vars &lt;- c("x","y","z"),第二个是Reduce(`&amp;`,Map(`&gt;`,b[vars], colMeans(b[vars])))
    猜你喜欢
    • 2023-02-25
    • 2010-10-15
    • 2021-07-28
    • 1970-01-01
    • 2011-12-04
    • 2020-10-21
    • 2019-02-23
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多