我正在尝试使用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))
谢谢大家!
答案 0 :(得分:3)
您可以使用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
}
}
答案 1 :(得分:0)
我们可以使用CJ
中的data.table
library(data.table)
CJ(yr = 2019:2023, m = 1:12)