4

特定の要件を満たす行を返す R 関数を作成しましたが、出力形式に問題がありました。

たとえば、特定の値を持つ行を返します。

xx.1 <- data.frame(aa= 1:5, bb = c("AA","BB","CC","DD","EE"))
xx.2 <- c("AA","DD")
ff_in <- function(x,y){
  if (toupper(x[2]) %in% y) {return(x)}
}
apply(xx.1,1,ff_in,xx.2)

ただし、出力は次のようになります。

[[1]]
aa   bb 
"1" "AA" 

[[2]]
NULL

[[3]]
NULL

[[4]]
aa   bb 
"4" "DD" 

[[5]]
NULL

R return null を抑制し、このようなものを返す方法は?

aa bb
"1" "AA" 
"4" "DD" 
4

2 に答える 2

6

どうですか

do.call(rbind,apply(xx.1,1,ff_in,xx.2))

? これにより、すべての結果が行ごとに結合されます。ベクトルをrbinding しても効果はありません。NULL

于 2012-04-17T16:59:00.093 に答える
5

次のようにする方が簡単ではないでしょうか。

xx.1[ toupper(xx.1[[2]]) %in% xx.2 , ]

関数でそれが必要な場合、これはより高速であり、データフレームを文字マトリックスに強制するという望ましくない副作用もないと確信しています。

exncol <- function(df, coln, choices) df[ toupper(df[[coln]]) %in% choices , ]
exncol(xx.1, 2, xx.2)
  aa bb
1  1 AA
4  4 DD
于 2012-04-17T17:55:05.463 に答える