R从组聚合的DataFrame集合中创建动态变量

时间:2016-10-08 07:31:47

标签: r list dataframe lapply

我的问题陈述是我有一个数据帧列表,如df1,df2,df3.Data就像

df1

a,b,c,d
1,2,3,4

1,2,3,4

df2

a,b,c,d

1,2,3,4

1,2,3,4

现在,对于这两个数据帧,我应该创建一个新的数据帧,采用这两个数据帧的聚合列,因为我使用下面的代码

for(i in 1:2){
 assign(paste(final_val,i,sep=''),sum(assign(paste(df,i,sep='')))$d*100)}

我收到错误:

  

分配错误(粘贴(hvp_route_dsct_clust,i,sep =“”)):     参数“value”缺失,没有默认值

我的输出应该是

final_val1 <- 800
final_val2 <- 800

对于那些值final_val1,final_val2我应该创建dataframe dynamicaly

有人可以帮我这个

1 个答案:

答案 0 :(得分:1)

如果我们需要使用assign,请通过指定模式&#39; df&#39;从ls获取全局环境中的对象名称。接下来是一个或多个数字(\\d+),创建另一个&#39; final_val的矢量(&#39; nm1&#39;),循环显示&#39; nm1&#39; ;,assign&#39; nm2&#39;中的每一个元素我们从提取专栏中得到的价值&#39; d&#39;每个&lt; df&gt;乘以100并取sum

nm1 <- ls(pattern = "df\\d+")
nm2 <- paste0("final_val", seq_along(nm1))
for(i in seq_along(nm1)){
   assign(nm2[i], sum(get(nm1[i])$d*100))
}
final_val1
#[1] 800
final_val2
#[1] 800

否则,我们将数据集放在list中,提取&#39; d&#39;列,乘以100并执行列总和

unname(colSums(sapply(mget(nm1), `[[`, 'd') * 100))
#800 800 

数据

df1 <- structure(list(a = c(1L, 1L), b = c(2L, 2L), c = c(3L, 3L), d = c(4L, 
4L)), .Names = c("a", "b", "c", "d"), class = "data.frame", row.names = c(NA, 
-2L))

df2 <- structure(list(a = c(1L, 1L), b = c(2L, 2L), c = c(3L, 3L), d = c(4L, 
4L)), .Names = c("a", "b", "c", "d"), class = "data.frame", row.names = c(NA, 
-2L))