-2

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

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

我想创建一个新的数据框,用于制作每个州的税收汇总表。

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

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

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

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

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

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

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

有没有人有更直接的方法来从其他数据框创建一个汇总表?

4

2 回答 2

1

我对您的代码有几点意见:

  1. 运算符是一个方便的$运算符,主要用于交互模式。最好在函数或循环中使用[or 。[[
  2. 循环遍历列表的 R 方式是使用XXapply( lapply, sapply)。这将避免使用可能产生的副作用for,也避免预分配内存。

这是一个使用的示例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'))

然后得到 tax 的向量:

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
于 2013-10-19T15:32:19.550 回答
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
于 2013-10-19T15:37:14.220 回答