1

Rでは、any-Functionは、結果がブール値である列に適用されます。行ごとに適用するための最良の方法は何ですか?この場合の私の目標は、A、B、またはCのいずれかが1または6の場合、Aの再コード化を行うことです(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)
4

3 に答える 3

4
TEST$NEW <- ifelse(apply(TEST,1,function(x) any(x==1|x==6)),101,NA)
于 2013-02-12T11:01:20.613 に答える
2

それを行う1つの方法ですが、より簡単な方法があるかもしれません:

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
于 2013-02-12T10:58:46.427 に答える
1

Another approach:

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
于 2013-02-12T11:51:47.223 に答える