2017-04-02 1 views
1

私はデータの整理/整理の最終段階にあり、この手順の提案をいただければ幸いです。私はRが新しく、データフレームやその他のデータ型の仕組みを完全に理解していません。 (私は勉強しようとしていますが、すばらしい解決策が必要なためにプロジェクトを持っています)。私はCSVファイルからデータをインポートしました。rの同一インスタンスを1つにグループ化して同時に、頻度と平均の統計を生成する方法はありますか?

同じ(日付、ID1、ID2、ID3)のインスタンスをグループ化するとします。出力のすべての統計の平均と、グループ化されたインスタンスの数を含む新しい列が必要です。

注:ID3には以下が含まれます。

In `[<-.factor`(`*tmp*`, is.na(tdata[["ID3"]]), value = c(3L, 3L, : 
    invalid factor level, NA generated 

データは次のとおりです:

 date  ID1  ID2  ID3 stat1 stat2 stat.3 
1 12-03-07 abc123 wxy456 pqr123 10 20  30 
2 12-03-07 abc123 wxy456 pqr123 20 40  60 
3 10-04-07 bcd456 wxy456 hgf356 10 20  40 
4 12-03-07 abc123 wxy456 pqr123 30 60  90 
5 5-09-07 spa234 int345 <NA>  40 50  70 

所望の出力 をグループ化する前に、私は解決策

tdata$ID3[is.na(tdata$ID3)] <- "NA" 
tdata[["ID3"]][is.na(tdata[["ID3"]])] <- "NA" 

を試してみましたが、エラーを取得してきた私は、 "NA" にこれらの名前を変更したいのですが

date  ID1,  ID2, ID3, n, stat1, stat2, stat 3 
12-03-07 abc123, wxy456, pqr457, 3, 20, 40, 60 
10-04-07 bcd456, wxy456, hgf356, 1, 10, 20, 40 
05-09-07 spa234, int345, big234, 1 , 40, 50, 70 

私はこの解決策を試しました:How to merge multiple data.frames and sum and average columns at the same time in R

しかし、グループ化して類似性をテストする必要がある列をマージできませんでした。

DF <- merge(tdata$date, tdata$ID1, tdata$ID2, tdata$ID3, by = "Name", all = T) 



Error in fix.by(by.x, x) : 'by' must specify uniquely valid columns 

最後に、n列を生成する。おそらく1の行を挿入し、要約しながら列の合計を使用しますか?

+0

希望する出力の最初の行を確認してください。期待平均は異なる – akrun

+0

私の悪い、はい、それは12-03-07 abc123、wxy456、pqr457、3、20、40、60 – MyLeftS0ck

答えて

3

dplyrでこれを行うことができます。 「ID」列でグループ化した後、「日付」と「n」はまた、グループ化変数内を、追加して、「STAT」列

library(dplyr) 
df1 %>% 
    group_by(ID1, ID2, ID3) %>% 
    group_by(date = first(date), n =n(), add=TRUE) %>% 
    summarise_at(vars(matches("stat")), mean) 

NOTEのmean取得:について変更「NA」から「big234を私が使用することは非常に直感的akrunによって提案されたdplyr解決策を見つけることながら、素敵なdata.table解決策もある

df1$ID3 <- as.character(df1$ID3) 
df1$ID3[is.na(df1$ID3)] <- "big234" 
+0

のように働いた!あなたの優雅なソリューションに感謝します。それが単一の声明であるとは想像できませんでした! – MyLeftS0ck

+0

@ MyLeftS0ckコメントありがとうございます。 [ここ](http://stackoverflow.com/help/someone-answers)にチェックを入れることもできます。 – akrun

1

上記の操作を行う前characterクラスにID3 『」、我々は変換することができます』と、それを変更します。

同様にkrun、私はNA値が "big234"に変換されて望みの結果が得られると仮定します。

library(data.table) 
# convert data.frame to data.table 
data <- data.table(df1) 

# return the desired output 
data[, c(.N, lapply(.SD, mean)), 
    by = list(date, ID1,ID2, ID3)] 
関連する問題