[英]Add a row for each month for each id in R
所以我有一個ID列表。
我想為表中的每個ID創建一個由一年中每個月的行組成的表。
我試圖在for循環中使用rbind,但這需要永遠...
for (k in seq_along(members))
{
for (i in seq(1,12))
{
df1<-rbind(df1, data.frame(MemYearMo=paste(members[k],"_",year,formatC(i,width=2,flag=0), sep="")))
}
}
成員顯然是我的ID列表。
我想要的輸出是:XXX_201701 XXX_201702 XXX_201703。 。 。 XXX 201712
其中XXX是我的ID之一。
做這樣的最快的方法是什么?
我不確定我是否了解您想要的輸出,但是您可以使用expand.grid
生成會員ID與一年中不同月份的組合。
例
df <- as.data.frame(expand.grid(members = 901:903, ym = 201701:201712))
df$MemYearMo <- paste(df$members, df$ym, sep = "_")
df
#> members ym MemYearMo
#> 1 901 201701 901_201701
#> 2 902 201701 902_201701
#> 3 903 201701 903_201701
#> 4 901 201702 901_201702
#> 5 902 201702 902_201702
#> 6 903 201702 903_201702
#> ...(and so on)...
#> 34 901 201712 901_201712
#> 35 902 201712 902_201712
#> 36 903 201712 903_201712
假設您的ID是唯一的,則可以使用data.table和paste0進行此操作。
id <- as.data.table(letters)
id <- id[, .(output = paste0(letters, paste0("_2017", c(paste0(0, 1:9), 10:12)))), by = .(letters)]
使用rep
:
id <- letters[1:10]
month <- 201701:201712
ids <- rep(ids, each=length(month))
months <- rep(months, length.out=length(id))
data.frame(id=ids, ym=months, id_ym = paste(ids, months, sep="_"))
給
id ym id_ym
1 a 201701 a_201701
2 a 201702 a_201702
3 a 201703 a_201703
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.