【问题标题】:R Creating Dynamic variables from group aggregated set of DataFramesR从一组聚合的DataFrames创建动态变量
【发布时间】:2016-10-08 07:31:46
【问题描述】:

我的问题陈述是我有一个数据框列表,如 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 = "")): 缺少参数“值”,没有默认值

我的输出应该是这样的

final_val1 <- 800
final_val2 <- 800

对于这些值 final_val1,final_val2 我应该动态创建数据框

谁能帮我解决这个问题

【问题讨论】:

  • 目前尚不清楚最终值与您的数据框有何关系。您能否详细说明“获取这两个数据框的聚合列”?您问题中的错误是因为您对assign 只有一个参数,而不是两个。
  • 可能我使用 assign 函数的方法可能是错误的,问题陈述是“df1 df2 dataframes column d should sum ,乘以 100 并分配给两个新变量,因此这些是 final_val1 和 final_val2 的值并且这个 final_val1 final_val2 应该作为数据帧动态形成”。

标签: r list dataframe lapply


【解决方案1】:

如果我们需要使用assign,通过指定模式'df'后跟一个或多个数字(\\d+),使用ls从全局环境中获取对象名称,创建另一个'final_val's向量( 'nm1'),遍历'nm1'的序列,assign'nm2'中的每个元素到我们从提取每个'df'的列'd'乘以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 中,提取“d”列,乘以 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))

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2021-06-26
    • 2012-08-02
    • 1970-01-01
    相关资源
    最近更新 更多