2017-04-12 44 views
1

我一直在嘗試使用dplyr在具有相同結構表的列表來總結幾個表:可以dplyr總結了幾個變量和表格的列表

LUZ_code Type1 Type2 Type3 Type4 country 
AT001L2 90142 752310 70700 7368  AT 
AT002L2 82693 193892 30264 496  AT 
AT003L2 119690 203394 28737 420  AT 
AT004L2 42259 85892 14512 189  AT 
AT005L2 113768 59841 15464 224  AT 
AT006L1 126001 102170 9344 134  AT 

我已經在應用一些lapply腳本,所以現在我有一個名爲國家名單內的表格。

如果我嘗試用一​​個循環做到這一點:

for (i in 1:length(countries)){ 
    years <- c("2010", "2030", "2030_ECL") 
    db <- as.data.frame(countries[i])[,-1] 
    db <- db %>% 
    group_by(country) %>% 
    summarise_each(funs(sum)) 
write.table(db, paste("country_conc",years[i], ".txt", sep = ""), 
      col.names = TRUE, row.names = FALSE, sep = "\t", quote = FALSE) 
} 

這似乎是沒有問題的工作,但我不知道是否有與lapply做的一種方式。我嘗試到目前爲止是:

summarise <- function (db){ 
db <- (db)[,-1] 
db <- db %>% 
    group_by(country) %>% 
    summarise_each(funs(sum)) 
return (db) 
} 
total <- lapply (concentration, summarise)` 

我收到此錯誤信息:

錯誤總結(TBL,類型1 = SUM(類型1),2型= SUM(2型),類型3 = SUM(類型3 ),: 未使用的參數(類型1 =總和(類型1),2型=總和(類型2),類型3 =總和(類型3),類型4 =總和(類型4))」

感謝您的幫助,

+1

lapply呼叫中的'濃度'是什麼? – akrun

+0

爲什麼不'bind_rows'表的列表(當分配一個ID),然後計算摘要? –

+0

您可以使用'summarise_at()'或'summarise_if()'來指定您想要彙總的列。 – FlorianGD

回答

1

我得到它ork罰款。我同意@akrun,我不知道concentration是什麼。我認爲將其改爲countries可能會解決您的問題。這是我的工作示例。

c1 <- "LUZ_code Type1 Type2 Type3 Type4 country 
AT001L2 90142 752310 70700 7368  AT 
AT002L2 82693 193892 30264 496  AT 
AT003L2 119690 203394 28737 420  AT 
AT004L2 42259 85892 14512 189  AT 
AT005L2 113768 59841 15464 224  AT 
AT006L1 126001 102170 9344 134  AT" 

t1 <- read.table(text = c1, header = T) 

t4 <- t3 <- t2 <- t1 
t2$country <- "ZZ" 
t3$country <- "YY" 
t4$country <- "XX" 

countries <- list(t1, t2, t3, t4) 

mySummarise <- function (db){ 
db <- (db)[,-1] 
db <- db %>% 
    group_by(country) %>% 
    summarise_each(funs(sum)) 
return (data.frame(db)) 
} 
total <- lapply (countries, mySummarise) 
do.call(rbind.data.frame, total) 
+0

在使用dplyr時定義自己的'summarise'函數可能不是一個好主意,作爲一個便箋 –

+0

對不起有點混亂,集中實際上是國家。我也意識到這個表並不能反映整個情況:各國是不定的(AT,BE,DK等可達28個國家),我想總結所有變量Type1 ... Type4按國家分組,因此在實踐中我應該得到一個28行和5列的表格,一個是國家的,一個是每個彙總類型的。 – vizpi

+0

好的。我編輯考慮了@docendodiscimus的評論。我也編輯過,所以函數返回一個數據框。所以你現在得到一個包含可能數據幀的列表作爲元素。然後,您只需將該列表轉換爲數據框或數據表。 – Jake