【问题标题】:assign a new value to multiple column为多列分配一个新值
【发布时间】:2014-03-25 10:22:21
【问题描述】:

我试图使用ifelse 为 R 分配一个新值(重新编码)倍数列。我想知道是否可以一步选择我想要重新编码的所有列,而不是多个 ifelse 循环

df <- data.frame(letters[1:10],
                 letters[1:2],
                 rep(c("HemoSeq1", "PLG_FL1"), each=5),
                 rep(0:4, each=2),
                 rep(4:0, each=2),
                 rep(4:0,each=2),
                 rep(0:4,each=2))
names(df) <-c("Sample", "Project", "Bait.Set", "ge1", "ge2", "ge3", "ge4")

df$ge1 <- ifelse(df$ge1 >= 1, 1, 0)
....
df$ge4 <- ifelse(df$ge4 >= 1, 1, 0)

或者使用for循环

for(i in 4:7) {
    df[i] <- ifelse(df[i] >= 1, 1, 0)
}

谢谢!

【问题讨论】:

    标签: r if-statement


    【解决方案1】:

    您可以像这样一次性分配所有列

    df[4:7] <- df[4:7] >= 1               # Gives you the result as logicals
    df[4:7] <- as.integer(df[4:7] >= 1)   # Gives you the result as integers
    

    这是一个所谓的“矢量化”操作,不涉及像 forlapply 这样的显式循环。如果您有大量数据,请始终努力使用它们,因为它们比非矢量化解决方案快得多。

    【讨论】:

      【解决方案2】:
      gt1 <- df[,4:7] >= 1
      df[,4:7][gt1] <- 1
      df[,4:7][!gt1] <- 0
      

      您可以将4:7 的每个实例替换为相关的整数或列的字符向量

      【讨论】:

        猜你喜欢
        • 2019-01-03
        • 2014-12-15
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多