r - 在数据框名称中使用循环
问题描述
我是 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]] <- i 中的错误:赋值目标扩展为非语言对象
所以我想我需要先在循环中创建一个向量 Orig,但是 <我不知道如何。
我也试过这个:
for (i in 1:n){
assign (paste0("b", as.character(i)), paste0("b", as.character(i)) %>% mutate(Orig = i))
}
但是得到一个错误:
UseMethod(“mutate”)中的错误:没有适用于“mutate”的适用方法应用于“character”类的对象
在这里我尝试使用 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) 个带有单个数字的数据帧。
我想知道我还能做什么?非常感谢!
解决方案
让我们创建一个简单的示例:
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)
推荐阅读
- html - 反应表单验证如何工作?
- c# - 外部项目可以在解决方案资源管理器中看到
- html - 使用 iFrame 嵌入 Excel 文件无法正常工作
- php - 使用子流程传递时不接受两个输入
- python - 使用 BeautifulSoup 从 url 中提取 url 列表
- python - Discord.py:使用齿轮是浪费时间吗?
- python - python Pandas - 在特定列值序列之前或之后添加/插入行并计算推算行数
- jenkins-pipeline - 带有 DependenceCheck 的 Jenkinsfile 管道因 RetireJS 检查而失败
- machine-learning - GPU 在 ML 预测方面是否有显着改进?(不是训练)
- ios - 列表中的 SwiftUI NavigationLink 没有使用 isActive 获得正确的详细信息页面