R 在行上应用任意值

R 在行上应用任意值,r,R,在R中,任意函数应用于结果为布尔值的列。 逐行应用它的最佳方式是什么?在这种情况下,我的目标是对a进行重新编码,如果a、B或C中的任何一个是1或6。(如果为真,测试$NEW应为101) 这里是我的数据框: 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 | T

在R中,任意函数应用于结果为布尔值的列。 逐行应用它的最佳方式是什么?在这种情况下,我的目标是对a进行重新编码,如果a、B或C中的任何一个是1或6。(如果为真,测试$NEW应为101)

这里是我的数据框:

  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)

TEST$NEW一种方法,但可能有一种更简单的方法:

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)

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

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)
TEST$NEW
TEST$NEW另一种方法:

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
TEST$NEW另一种方法:

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

TEST$NEW我要找的是一个类似于SPSS的函数。这里有语法any(A,1,6)| any(B,1,6)…我要找的是一个类似于SPSS的函数。这里有语法any(A,1,6)| any(B,1,6)…这就是我要找的!谢谢这就是我要找的!谢谢有趣的先验地,我会期望
TRUE^NA
FALSE^NA
都被定义为
NA
,或者两者都等于它们自己(特别是考虑到逻辑幂似乎只对非负整数有意义),但给定
c(1,0)^NA==c(1,NA)
很清楚这是从哪里来的。很有趣;先验地说,我本以为
TRUE^NA
FALSE^NA
都会被定义为
NA
,或者两者都等于它们自己(特别是考虑到逻辑幂似乎只对非负整数有意义),但给定
c(1,0)^NA==c(1,NA)
这一点很清楚。