测试多个数字列以创建新列

时间:2014-11-17 01:55:11

标签: r conditional-statements numeric logical-operators

我想创建一个新的数字列,根据多个数字列的阈值分配值。

Data<-data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100), D=rnorm(100), E=rnorm(100))

基本上,如果A,B或C列中的任何一个超过2,我想为我的新列分配一个5。我试过了:

  Data$Flag[if((abs(Data$A)>2 | abs(Data$B)>2 | abs(Data$C)>2)] <-5

哪个不起作用。任何想法,将不胜感激!

3 个答案:

答案 0 :(得分:1)

你想:

Data$Flag <- ifelse((abs(Data$A)>2 | abs(Data$B)>2 | abs(Data$C)>2), 5, NA)

NA替换为不等于2的替代值。

答案 1 :(得分:1)

你也可以使用:

Data$Flag1 <- NA^(!rowSums(abs(Data[,c('A', 'B', 'C')]) >2)) +4
identical(Data$Flag, Data$Flag1) #Comparing the results from @Robert Krzyzanowski
#[1] TRUE

答案 2 :(得分:1)

另一种选择:

Data$Flag[rowSums(abs(Data[c("A","B","C")]) > 2) > 0] <- 5