for循环下的2个向量
我有一个ID为列的数据帧df。我试图在另一个称为日期的向量之间进行所有可能的组合for循环下的2个向量,r,R,我有一个ID为列的数据帧df。我试图在另一个称为日期的向量之间进行所有可能的组合 df ID Asda Dsaa Fasd Das dates <- seq(as.Date("2019-12-27"), as.Date(" "), by=1) 预期结果是:我可以获取ID和日期的所有组合吗?您可以使用合并获取变量的所有组合: df <- data.frame(ID = c("Asda", "Dsaa", "Fasd", "Das")) dates <- seq(as.Dat
df
ID
Asda
Dsaa
Fasd
Das
dates <- seq(as.Date("2019-12-27"), as.Date(" "), by=1)
预期结果是:我可以获取ID和日期的所有组合吗?您可以使用
合并
获取变量的所有组合:
df <- data.frame(ID = c("Asda", "Dsaa", "Fasd", "Das"))
dates <- seq(as.Date("2019-12-27"), as.Date("2019-12-28"), by=1)
merge(df, dates, by = NULL)
编辑:仅用于循环
new_df <- data.frame()
for (i in df$ID) {
for (j in dates) {
new_df <- rbind(new_df, data.frame(ID = i, Date = j))
}
}
new_df您可以使用merge
获取变量的所有组合:
df <- data.frame(ID = c("Asda", "Dsaa", "Fasd", "Das"))
dates <- seq(as.Date("2019-12-27"), as.Date("2019-12-28"), by=1)
merge(df, dates, by = NULL)
编辑:仅用于循环
new_df <- data.frame()
for (i in df$ID) {
for (j in dates) {
new_df <- rbind(new_df, data.frame(ID = i, Date = j))
}
}
new_df所有可能的ID和日期组合
expand.grid(df$ID,dates)
编辑:使用for循环
k=1
temp=matrix(NA,length(df$ID)*length(dates),2)
for (i in df$ID) {
for (j in dates){
temp[k,]=c(i,j)
k=k+1
}
}
ID和日期的所有可能组合
expand.grid(df$ID,dates)
编辑:使用for循环
k=1
temp=matrix(NA,length(df$ID)*length(dates),2)
for (i in df$ID) {
for (j in dates){
temp[k,]=c(i,j)
k=k+1
}
}
这不是一个for
循环,而是为了完整性(expand.grid
和merge
都是Rbase
很好的答案),下面是另一个使用tidyr::crossing()
的解决方案。我不知道你为什么会在这里这样做,因为它更难优化(请参阅Miles Mcbain的一篇好文章)
dfr id日期
#>1 id1 2019-12-27
#>2 id2 2019-12-28
#>3 id3 2019-12-29
#>4 id4 2019-12-30
#>5 id5 2019-12-31
#>6 id6 2020-01-01
#>7 id7 2020-01-02
#>8 id8 2020-01-03
#>9 id9 2020-01-04
#>10 id10 2020-01-05
三年:交叉(dfr$id,dfr$dates)
#>#A tible:100 x 2
#>`dfr$id``dfr$dates`
#>
#>1 id1 2019-12-27
#>2 id1 2019-12-28
#>3 id1 2019-12-29
#>4 id1 2019-12-30
#>5 id1 2019-12-31
#>6 ID1202-01-01
#>7 ID1202-01-02
#>8 ID1202-01-03
#>9 ID1202-01-04
#>10 ID1202-01-05
#> # ... 还有90行
这不是一个循环,而是为了完整性(expand.grid
和merge
是Rbase
很好的答案),下面是另一个使用tidyr::crossing()
的解决方案。我不知道你为什么会在这里这样做,因为它更难优化(请参阅Miles Mcbain的一篇好文章)
dfr id日期
#>1 id1 2019-12-27
#>2 id2 2019-12-28
#>3 id3 2019-12-29
#>4 id4 2019-12-30
#>5 id5 2019-12-31
#>6 id6 2020-01-01
#>7 id7 2020-01-02
#>8 id8 2020-01-03
#>9 id9 2020-01-04
#>10 id10 2020-01-05
三年:交叉(dfr$id,dfr$dates)
#>#A tible:100 x 2
#>`dfr$id``dfr$dates`
#>
#>1 id1 2019-12-27
#>2 id1 2019-12-28
#>3 id1 2019-12-29
#>4 id1 2019-12-30
#>5 id1 2019-12-31
#>6 ID1202-01-01
#>7 ID1202-01-02
#>8 ID1202-01-03
#>9 ID1202-01-04
#>10 ID1202-01-05
#> # ... 还有90行
谢谢。但实际上我只需要in-for循环。不可能吗?谢谢。但实际上我只需要in-for循环。不可能吗?谢谢。但实际上我只需要in-for循环。不可能吗?谢谢。但实际上我只需要in-for循环。这不可能吗?这能回答你的问题吗?这回答了你的问题吗?