我的问题陈述是我有一个数据帧列表,如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
有人可以帮我这个
答案 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))