for循环下的2个向量

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

我有一个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.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
都是R
base
很好的答案),下面是另一个使用
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
是R
base
很好的答案),下面是另一个使用
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循环。这不可能吗?这能回答你的问题吗?这回答了你的问题吗?