我试图使用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)
}
谢谢!
答案 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
这是一种所谓的“矢量化”操作,不涉及for
或lapply
等显式循环。如果您有大量数据,请务必使用这些数据,因为它们比非矢量化解决方案快得多。
答案 1 :(得分:0)
gt1 <- df[,4:7] >= 1
df[,4:7][gt1] <- 1
df[,4:7][!gt1] <- 0
您可以使用列的相关整数或字符向量替换4:7
的每个实例