为多列分配新值

时间:2014-03-25 10:22:21

标签: r if-statement

我试图使用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)
}

谢谢!

2 个答案:

答案 0 :(得分:0)

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

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等显式循环。如果您有大量数据,请务必使用这些数据,因为它们比非矢量化解决方案快得多。

答案 1 :(得分:0)

gt1 <- df[,4:7] >= 1
df[,4:7][gt1] <- 1
df[,4:7][!gt1] <- 0

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