考虑df1:
id=c(1,2,3,4,5,6); n_df2=c(1,1,2,2,3,3);
df1=as.data.frame(cbind(id,n_df2)); df1
其中n_df2是该id在df2中的出现次数。
id2=c(1,2,3,4,5,6,3,4,5,5,6,6);
value=c(25,35,46,78,12,34,12,33,87,56,11,8);
df2=as.data.frame(cbind(id2,value)); df2
(id2相当于id(
我希望df1看起来像这样:
df1$value.1=c(25,35,46,78,12,34)
df1$value.2=c(NA,NA,12,33,87,11);
df1$value.3=c(NA,NA,NA,NA,56,8); df1;
任何帮助都将不胜感激!
谢谢。
在基本R中,您可以执行:
merge(df1, reshape(transform(df2[c('id2','value')],
time = ave(id2, id2, FUN = seq_along)),dir = 'wide', idvar = 'id2'),
by.x = 'id', by.y = 'id2', all.x = TRUE)
id n_df2 value.1 value.2 value.3
1 1 1 25 NA NA
2 2 1 35 NA NA
3 3 2 46 12 NA
4 4 2 78 33 NA
5 5 3 12 87 56
6 6 3 34 11 8
在tidyverse
library(tidyverse)
df1 %>%
left_join(df2 %>%
select(id2, value) %>%
group_by(id2) %>%
mutate(time = row_number()) %>%
pivot_wider(id2, names_from=time, names_prefix='value.', values_from = 'value'),
c('id'='id2'))
id n_df2 value.1 value.2 value.3
1 1 1 25 NA NA
2 2 1 35 NA NA
3 3 2 46 12 NA
4 4 2 78 33 NA
5 5 3 12 87 56
6 6 3 34 11 8