应用任何行

时间:2013-02-12 10:50:07

标签: r

在R中,any-Function应用于结果为boolean的列。 什么是最好的方法,逐行应用它?在这种情况下,我的目标是对A进行重新编码,如果A,B或C中的任何一个是1或6.(如果TRUE TEST $ NEW应该是101)

这是我的DataFrame:

  A B C D
  1 1 1 "A"
  2 1 2 "B" 
  3 6 3 "C"
  5 3 5 "D"

可以这样做,但应该有一个更聪明的解决方案:

TEST$NEW <- ifelse(TEST$A == 1 | TEST$B == 1 | TEST$C == 1 | TEST$A == 6 | TEST$B == 6 | TEST$C == 6, 101, NA)

3 个答案:

答案 0 :(得分:4)

TEST$NEW <- ifelse(apply(TEST,1,function(x) any(x==1|x==6)),101,NA)

答案 1 :(得分:2)

一种方法,但可能有一个更简单的方法:

df <- read.table(textConnection('A B C D
1 1 1 "A"
2 1 2 "B" 
3 6 3 "C"
5 3 5 "D"'), header=TRUE)

test <- rowSums(sapply(df[,c("A","B","C")], function(v) v %in% c(1,6)))
df$TEST <- ifelse(test>0, 101, NA)

给出了:

  A B C D TEST
1 1 1 1 A  101
2 2 1 2 B  101
3 3 6 3 C  101
4 5 3 5 D   NA

答案 2 :(得分:1)

另一种方法:

TEST$NEW <- 101 * apply(TEST, 1, function(x) any(x %in% c(1, 6))) ^ NA

  A B C D NEW
1 1 1 1 A 101
2 2 1 2 B 101
3 3 6 3 C 101
4 5 3 5 D  NA