2017-04-06 25 views
0

如何使用sapply?我的数据框中有40万条记录。数据需要填充到b $ a1而不使用for循环。在R的sapply - 如何解决这个没有循环

b <- a 
b[1:100,] 
for (i in 1:nrow(b)) { 
    if (b`$`x[i] > mean(b`$`x) & 
     b`$`y[i] > mean(b`$`y) & 
     b`$`z[i] < mean(b`$`z)) 
    { 
     b`$`a1[i] = '1' 
    } 
    else { 
     b`$`a1[i] = '0' 
    } 
} 
head(b) 

回答

2

我想你可以只使用ifelse()这里:

b$a1 <- ifelse(b$x > mean(b$x) & b$y > mean(b$y) & b$z > mean(b$z), 1, 0) 

Akrun的更新:

b$a1 <- as.integer(b$x > mean(b$x) & b$y > mean(b$y) & b$z > mean(b$z)) 
+1

代码高尔夫 - 'rowSums(B> T(colMeans(B)))= = ncol(b)'或者甚至'Reduce(\'&',Map(\'> \',b,colMeans(b)))' – thelatemail

+0

@thelatemail但是不会假设只有三列'B'? –

+1

@TimBiegeleisen - true,但可以很容易地调整 - 为第二个减少(\'&',Map(\'> \',b [vars],colMeans(b [vars])))''如果'vars < - c(“x”,“y”,“z”)' – thelatemail

相关问题