2017-04-12 69 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