从多个数据框中提取摘要

时间:2013-10-19 15:04:04

标签: r function

好吧,这应该是一项相当简单的任务,但我遇到了麻烦。

假设我的库中有一组50个数据帧。例如,假设每个数据框包含每个美国州,其人口,税收和失业率的信息。

我想创建一个新的数据框,其中列出了每个州的税收摘要表。

我尝试的方法是创建数据框的向量

data <- c(New.York,Virginia,Maryland)

然后创建一个函数,该函数读入该向量并为向量的每个元素(每个元素是状态数据框)汇总税变量(所以Virginia$tax等)并将其附加到表中。

我遇到的问题是当我引用向量的每个元素时

for (i in data){
    print (i$cost)
}

R不会将该元素识别为数据帧。它说:

Error in i$cost : $ operator is invalid for atomic vectors

是否有人有更简单的方法从其他数据框创建摘要表?

2 个答案:

答案 0 :(得分:1)

我对你的代码有几点评论:

  1. $运算符是一个方便的运算符,可以在其中使用 互动模式。最好在函数或函数内使用[[[ 循环。
  2. 循环浏览列表的R-way是使用XXapplylapplysapply)。这样可以避免使用for可能产生的副作用,同时避免预先分配内存。
  3. 这是一个使用sapply的示例,但首先我创建了一个可重现的示例(因为您没有提供):

    set.seed(1)
    ll <- replicate(3, data.frame(tax= rnorm(1),
                      population=rnorm(1,10)),simplify=FALSE)
    ll <- setNames(ll,c('New.York','Virginia','Maryland'))
    

    然后获得税收的载体:

    sapply(ll,'[[','tax')
     New.York   Virginia   Maryland 
    -0.6264538 -0.8356286  0.3295078 
    

    或使用lapply获取人口摘要:

    lapply(ll,'[[','population')
    
    $New.York
    [1] 10.18364
    
    $Virginia
    [1] 11.59528
    
    $Maryland
    [1] 9.179532
    

答案 1 :(得分:0)

    mydata1<-mtcars[1:10,1:2]
    mydata2<-mtcars[11:20,1:2]
    mydata<-list(mydata1,mydata2)
   for (i in mydata){show(i[,"mpg"])}


     [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2
 [1] 17.8 16.4 17.3 15.2 10.4 10.4 14.7 32.4 30.4 33.9