我正在尝试temp2015
使用for循环创建一组动态命名的新对象(例如),并存储动态值-具体来说,是其他对象的名称(例如Y2015
)和for循环中使用的值(例如2015
)-在动态命名的新对象中。
我不确定为什么下面的代码不起作用。
Y2015 = data.frame(VAR1 = 6:10, VAR2 = 1:5)
Y2016 = data.frame(VAR1 = 7:11, VAR2 = 11:15)
Y2017 = data.frame(VAR1 = 7:11, VAR3 = 5:9, VAR4 = 4:8)
for (i in 2015:2017) {
paste0("temp", i) <- cbind(names(paste0("Y", i)), i)
}
all <- rbind(temp2015, temp2016, temp2017)
下面的代码获得了我想要的结果(特别是对象中的数据内容all_manual
),但这是在非常小的示例数据集上手动完成的,不是长期解决方案。
Y2015 = data.frame(VAR1 = 6:10, VAR2 = 1:5)
Y2016 = data.frame(VAR1 = 7:11, VAR2 = 11:15)
Y2017 = data.frame(VAR1 = 7:11, VAR3 = 5:9, VAR4 = 4:8)
all_manual = data.frame(file = c('VAR1', 'VAR2', 'VAR1', 'VAR2', 'VAR1', 'VAR3', 'VAR4'),
year = c(2015, 2015, 2016, 2016, 2017, 2017, 2017))
我将不胜感激任何有关如何使此工作的建议或想法。
您可以使用mget
和stack
# creates a list of all objects with names starting with "Y" followed by 4 digits
l <- mget(x = ls(pattern = "^Y\\d{4}$"))
现在用于stack
根据该列表的名称和该列表包含的数据框的列名称创建一个数据框
out <- stack(sapply(l, names))
结果
out
# values ind
#1 VAR1 Y2015
#2 VAR2 Y2015
#3 VAR1 Y2016
#4 VAR2 Y2016
#5 VAR1 Y2017
#6 VAR3 Y2017
#7 VAR4 Y2017
如果您希望删除“ Y”并将其设置ind
为数字,请尝试
out$ind <- as.numeric(sub("Y", "", out$ind))
更改列名
names(out) <- c("file", "year")
out
# file year
#1 VAR1 2015
#2 VAR2 2015
#3 VAR1 2016
#4 VAR2 2016
#5 VAR1 2017
#6 VAR3 2017
#7 VAR4 2017
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句