2016-09-27 8 views
1

私は、結果を複数のCSVファイルに保存する複数の実験を分析するためにRを使用しています。私は、データを集計し、私はこれらの集計を組み合わせたテーブルを構築したい次Rマージ異なるファイルからのデータの集計

Tabulations of Combination1.csv 
A 1000 
B 50 
C 200    
Tabulations of Combination2.csv 
A 25 
B 1500 
D 30 
Tabulations of Combination3.csv 
B 19 
C 500 
E 2000 

のような結果を得るためにtable()を実行します。

Combination A  B  C  D E 
c1   1000 50 200 N/A N/A 
c2   25 1500 N/A 30 N/A 
c3   N/A 19 500 N/A 2000  

答えて

1

は、ここで私が使用してそれを行うだろうかですtidyrおよびdplyr

データ

c1 <- rep(LETTERS[1:3], c(1000, 50, 200)) 
c2 <- rep(LETTERS[c(1:2, 4)], c(25, 1500, 30)) 
c3 <- rep(LETTERS[c(2:3, 5)], c(19, 500, 2000)) 

コード

library(tidyr) 
library(plyr) 
allC <- list(c1 = c1, c2 = c2, c3 = c3) 
# get all tables in data.frame format 
ldply(names(allC), function(x) { 
    tab <- table(allC[[x]]) 
    data.frame(Combination = x, element = names(tab), Freq = c(tab)) 
}) %>% spread(element, Freq) 

# Combination A B C D E 
# 1   c1 1000 50 200 NA NA 
# 2   c2 25 1500 NA 30 NA 
# 3   c3 NA 19 500 NA 2000 

説明

あなたは、それぞれの要素の名前を追加最初data.frameにすべてのテーブルを変換します。次に、spreadを使用して値を広げます。

+0

私は 'allC'リストを構築するためにparLapply(clus、comboName、function(x){table(read.csv(x)$ code)})を使用しています。返されるリストにどのようにcomboNameを追加できますか? – Wanderer

+0

私の例では、 'allC'はすべての_rawデータを含んでいます(*テーブルではありません*)。だから私は ''コンボ名 'が' * .csv'の名前を保持していると仮定して '' allC < - setNames(parLapply(clus、comboName、function(x)read.csv(x)$ code) )、comboName) 'と入力します。これは、各 'csv'の列' code'をリストに読み込み、その名前に 'comboName'という名前を割り当てます。私の場合のように、 'ldply'を直接実行することができます。 – thothal

+0

Thothalありがとうございます。明らかに機能しなかったparLapply関数の中でsetNamesを使ってみました。私は操作の並行順序で動作することに驚いていますが、私はそれがうれしいです。 – Wanderer

0
library(dplyr) 
library(tidyr) 

x <- table(c(rep("A", 1000), rep("B", 50), rep("C", 200))) 
y <- table(c(rep("A", 25), rep("B", 1500), rep("D", 30))) 
z <- table(c(rep("B", 19), rep("C", 500), rep("E", 2000))) 

X <- data.frame(x) %>% spread(Var1, Freq) 
Y <- data.frame(y) %>% spread(Var1, Freq) 
Z <- data.frame(z) %>% spread(Var1, Freq) 

X %>% full_join(Y) %>% full_join(Z) %>% 
    mutate(Combination = paste0("c", seq(1,3))) 

結果:

> X %>% full_join(Y) %>% full_join(Z) %>% 
+ mutate(Combination = paste0("c", seq(1,3))) 
Joining, by = c("A", "B") 
Joining, by = c("B", "C") 
    A B C D E Combination 
1 1000 50 200 NA NA   c1 
2 25 1500 NA 30 NA   c2 
3 NA 19 500 NA 2000   c3 

再現性例えばxyzオブジェクトを提供するために、次回のために考えてください:)

関連する問題