在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)
答案 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