【问题标题】:Using loop in a name of dataframe在数据框名称中使用循环
【发布时间】:2021-03-17 19:14:46
【问题描述】:

我是 R 的新手,如果有任何帮助,我将不胜感激!

我创建了 12 个数据框,分别命名为 b1、b2、... b12。 现在在每个数据帧中,我想创建一个变量“Orig”来指示数据帧的数量。

换句话说,我想写一个和这段代码一样的循环:

b1$Orig <- 1
b2$Orig <- 2
...
b12$Orig <- 12

或者像这个:

b1 <- b1 %>%
  mutate(Orig = 1)
...
b12 <- b12 %>%
  mutate(Orig = 12)

我试过这个:

for (i in 1:n){
  paste0("b", as.character(i))[[Orig]] <- i
  }

但是得到一个错误:

paste0("b", as.character(i))[[Orig]]

所以我想我需要先在循环中创建一个向量 Orig,但是

我也试过这个:

for (i in 1:n){
  assign (paste0("b", as.character(i)), paste0("b", as.character(i)) %>% mutate(Orig = i))
  }

但是得到一个错误:

UseMethod("mutate") 中的错误: 没有适用于“字符”类对象的“变异”方法

这里我尝试使用 as.data.frame 函数

for (i in 1:n){
  assign (paste0("b", as.character(i)), as.data.frame(paste0("b", as.character(i))) %>% mutate(Orig = i))
  }

,但结果我只得到 (1x1) 个带有单个数字的数据帧。

我想知道我还能做什么? 非常感谢!

【问题讨论】:

  • 一个简单的数据帧计数器就是将数据帧存储在一个列表中,并通过其列表索引号引用一个特定的数据帧。例如blist &lt;- list(b1, b2, ... b12) blist[[4]] 是数据框 b4

标签: r loops


【解决方案1】:

让我们创建一个简单的例子:

b1 <- data.frame(a=1:4, b=5:8)
B <- list(b1, b2, b3, b4)

现在添加Orig 列使用lapply

B2 <- lapply(1:4, function(x) data.frame(Orig=x, B[[x]]))
B2
# [[1]]
#   Orig a b
# 1    1 1 5
# 2    1 2 6
# 3    1 3 7
# 4    1 4 8
# 
# . . . .
# 
# [[4]]
#   Orig a b
# 1    4 1 5
# 2    4 2 6
# 3    4 3 7
# 4    4 4 8

如果您现在想将带标签的数据框合并为一个:

B3 <- do.call(rbind, B2)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多