数据框中循环的替代方案

时间:2017-08-18 13:21:21

标签: r loops dataframe

我遇到运行代码所需时间的问题。基本上,我在最后一列中有几个列是键值(我在可重现的示例中将其标识为平均值)。我希望它在低于值时为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
}

提前谢谢

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)