0

既存のデータ フレームに、数値変数の中央値または因子の最も一般的なカテゴリのいずれかを含む新しいデータ フレームを自動的に作成しようとしています。そう:

Number Factor  
3      A
2      A
5      B

に変わるはずです

Number Factor  
3      A

変数ごとに個別に計算できます。純粋な数値変数の場合は、colMeans コマンドを使用することもできます。純粋に因子変数の場合は、 which.max() を使用します。しかし、私は 2 つを組み合わせてスケーラブルで柔軟なソリューションにすることができませんでした。

4

3 に答える 3

2

分岐lapplyで使用できます:if

y <- read.table(text = "Number Factor  
3      A
2      A
5      B", header = TRUE)

as.data.frame(lapply(y, function(x) {
if (is.numeric(x)) return (median(x))
else return(x[which.max(table(x))])
}))
于 2013-04-09T12:56:02.457 に答える
1

あなたはそのようなものをテストすることができます:

FUN <- function(x) {
  if (is.numeric(x)) 
     return(median(x))
  else 
     x <- sort(as.character(x))
  rl1 <- rle(x)
  rl1$val[which.max(rl1$le)]
  }

as.data.frame(lapply(tab, FUN))
aggregate(tab, by=list(gl(1,nrow(tab))), FUN=FUN)
# even easier
bob <- lapply(tab, function(x) if(is.numeric(x)) median(x) else x[median(as.numeric(x))])
as.data.frame(bob)
于 2013-04-09T12:49:52.363 に答える
1
as.data.frame( lapply(dfrm, function(x) if(is.numeric(x)) {
                            median(x) } else {
                            names(sort( table(x) , decreasing=TRUE )[1])
                                             })
              )
于 2013-04-09T13:00:31.163 に答える