-1

私は何の助けもなしにこの質問を数回しました。それ以来、コードを改善したので、誰かがアイデアを持っていることを願っています! 0 と 1 でいっぱいのデータセットがあります。単純に 10 列を追加して、3835 行の 1 列にしたいだけです。これまでの私のコードは次のとおりです。

# select for valid IDs
data = history[history$studyid %in% valid$studyid,]

sibling = data[,c('b16aa','b16ba','b16ca','b16da','b16ea','b16fa','b16ga','b16ha','b16ia','b16ja')]

# replace all NA values by 0
 sibling[is.na(sibling)] <- 0

# loop over all columns and count the number of 174
apply(sibling, 2, function(x) sum(x==174))

問題は、このコードがすべての行を加算することです。すべての列を加算したいので、結果は 1 列になります。これは私が今得ている答えですが、どちらが間違っていますか:

b16aa b16ba b16ca b16da b16ea b16fa b16ga b16ha b16ia b16ja 
   68    36    22    18     9     5     6     5     4     1 
4

1 に答える 1

0

apply()MARGIN が列である 2 に設定されています。MARGIN 引数を 1 に設定して、関数 sum が行全体に適用されるようにします。これは@sgibbによって言及されました。

それがうまくいかない場合 (例を再現できない場合)、最初に行列の要素を整数に変換してからX2 <- apply(sibling, c(1,2), function(x) x==174)、rowSums を使用して各行の列を合計しますXsum <- rowSums(X2, na.rm=TRUE)。このセットアップでは、最初に NA を 0 に変更する必要はありませんna.rmrowSums()

于 2013-05-10T04:42:21.903 に答える