好吧,这应该是一项相当简单的任务,但我遇到了麻烦。
假设我的库中有一组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
是否有人有更简单的方法从其他数据框创建摘要表?
答案 0 :(得分:1)
我对你的代码有几点评论:
$
运算符是一个方便的运算符,可以在其中使用
互动模式。最好在函数或函数内使用[
或[[
循环。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'))
然后获得税收的载体:
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