私はデータセットの次のタイプ持って適用してループを書き換える:R:
id;2011_01;2011_02;2011_03; ... ;2001_12
id01;NA;NA;123; ... ;NA
id02;188;NA;NA; ... ;NA
で毎月、各行は、一意の顧客であり、各列は(過去10年から、この顧客の形質を示します独自の列を持つ)。この120カラムのデータフレームを10カラムのデータフレームに凝縮したいのですが、これはほとんどの行が(月自体は変わるかもしれませんが)毎年1回または0回の観測があることがわかっているからです。
私はすでにこれは、ネストされた場合、句でループを使用して、1年時に、やった:
for(i in 1:nrow(input_data)) {
temp_row <- input_data[i,c("2011_01","2011_02","2011_03","2011_04","2011_05","2011_06","2011_07","2011_08","2011_09","2011_10","2011_11", "2011_12")]
loc2011 <- which(!is.na(temp_row))
if(length(loc2011) > 0) {
temp_row_2011[i,] <- temp_row[loc2011[1]] #pick the first observation if there are several
} else {
temp_row_2011[i,] <- NA
}
}
私のデータセットはかなり大きいです、と私は上記のループを実行する必要があるので、 10回(毎年1回)、これは時間がかかりすぎている。 Rでapplyコマンドを使用するほうがはるかに優れていることを知っていますので、この作業について助けていただければ幸いです。どのように私は全体のことを(別の年を含む)より良い書き込みすることができますか?
ありがとう。私はすでにあなたの前のコードをテストして、それが私が探していたビルディングブロックであるように思えました。今週末にこのコードを使用してプロセス全体を自動化しようとします。いいアドバイス。 – Joshua