使用R迭代重命名变量和数据帧

时间:2017-07-07 19:30:53

标签: r

我想汇总数据并创建动态列列并存储在不同的数据框中:

数据类似于:

col1  col2  col3
A     1      200
B     1      300
A     2      400

k=c("A","B","C")
for(i in k)
  {
    group_data <- group_by(data[data$col1==i,], col2)
    summary_i<- summarize(group_data ,paste("var",k[i],sep="_") = n())
   }

预期产出:

名称为summary_A, summary_B, summary_C的三个数据框,分别包含变量var_Avar_Bvar_C

1 个答案:

答案 0 :(得分:0)

正如@MrFlick正确指出的那样,有更好的方法可以解决您的问题 无论如何,这是您的代码的工作版本:

data <- structure(list(col1 = structure(c(1L, 2L, 1L), .Label = c("A", 
"B"), class = "factor"), col2 = c(1L, 1L, 2L), col3 = c(200L, 
300L, 400L)), .Names = c("col1", "col2", "col3"), class = "data.frame", row.names = c(NA, 
-3L))

k=c("A","B","C")
for (i in seq_along(k)) {
  group_data <- group_by(data[data$col1==k[i],], col2)
  vark <- paste('var',i,sep='_')
  eval(parse(text=paste("summary_",i," <- summarize(group_data,", vark, " = n())",sep="")))
}

print(summary_1)
# A tibble: 2 x 2
#    col2 var_1
#   <int> <int>
# 1     1     1
# 2     2     1

print(summary_2)
# A tibble: 1 x 2
#    col2 var_2
#   <int> <int>
# 1     1     1

print(summary_3)
# A tibble: 0 x 2
# ... with 2 variables: col2 <int>, var_3 <int>