我遇到运行代码所需时间的问题。基本上,我在最后一列中有几个列是键值(我在可重现的示例中将其标识为平均值)。我希望它在低于值时为1,在高于值时为2。
有更简单的方法吗?
a <- c(1,3,5,6,4)
b <- c(10,4,24,5,3)
df <- data.frame (a,b)
df$mean <- rowMeans (df)
for (i in 1:5){
df[i,1:2] [df[i,1:2]<df$mean[i]] <- 1
df[i,1:2] [df[i,1:2]>df$mean[i]] <- 2
}
提前谢谢
答案 0 :(得分:2)
你可以这样做,
df[1:2] <- (df[1:2] > df$mean) + 1 #removed as.integer as per @akrun's comment
由此给出,
a b mean 1 1 2 5.5 2 1 2 3.5 3 1 2 14.5 4 2 1 5.5 5 2 1 3.5
答案 1 :(得分:2)
在R中尽可能避免使用循环!
使用dplyr中的mutate_each
的替代解决方案table.setRowSelectionInterval(0, 0);
同时给出
df %>% mutate_each(funs(ifelse(mean>.,1,2)), 1:2)