r - 从 for 循环打印到新的数据帧
问题描述
我正在尝试使用 for 循环在新数据框中打印新列。我已经构建了 for 循环,并让它们在控制台中打印我想要的内容,但是将这些结果放入新的数据帧中非常费时。我尝试使用正确的行数制作一个空白矩阵,目的是在执行 for 循环后将矩阵转换为数据帧,但我没有让它工作 - 我无法找出正确的代码for 循环将结果放入矩阵中。我在这里不包括失败的代码,我想我需要开始一个新的。这是我的代码
a <- 2019
z <- 2023
#print each year 12 times
for(i in a:z){
print(i);print(i);print(i);print(i);print(i);print(i);
print(i);print(i);print(i);print(i);print(i);print(i)
}
#print the sequence 1:12 the number of times that there are years
for(i in a:z) {
for(i in 1:12) {
print(i)}}
我的目标是每年打印 12 次的一列,每个月打印第二列,如下所示一年:
example <- data.frame(yr=c(2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019),m=c(1,2,3,4,5,6,7,8,9,10,11,12))
谢谢你们!
解决方案
您可以使用expand.grid
data <- expand.grid(yr = 2019:2023, m = 1:12)
# yr m
#1 2019 1
#2 2020 1
#3 2021 1
#4 2022 1
#5 2023 1
#6 2019 2
#7 2020 2
#8 2021 2
#9 2022 2
#10 2023 2
#....
tidyr
也有一些选择:
tidyr::expand_grid(yr = 2019:2023, m = 1:12)
和
tidyr::crossing(yr = 2019:2023, m = 1:12)
在循环中增长数据帧效率非常低,因此for
不建议使用循环,但如果我们想出于学习目的这样做,我们可以这样做:
x <- 2019:2023
y <- 1:12
df <- data.frame(matrix(0, nrow = length(x) * length(y), ncol = 2,
dimnames = list(NULL, c('yr', 'm'))))
count <- 1
for(i in x){
for(j in y) {
df[count, ] <- c(i, j)
count <- count + 1
}
}
推荐阅读
- eventstoredb - 如何通过 ID 在 EventStore 中查找事件?
- typescript - 我应该对函数使用接口类型以及参数和返回类型吗?
- php - 在两个表中查找不重复的值
- laravel - 链接不适用于带有 azure 服务器的 laravel 应用程序
- android - 关闭当前片段并打开上一个片段
- algorithm - 过期的消息哈希验证器
- python - Python ValueError for code that calculates correct results
- c# - 通过 Automapper 进行深度克隆,忽略层次结构中的特定属性
- hyperledger-fabric - 使用 Hyperledger Composer 文档在本地部署 Fabric 并出现错误
- python - 有什么方法可以进行虚拟缩进吗?