r-如何在不丢失重复信息的情况下将信息从一个数据帧带到另一个数据框



考虑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

相关内容

最新更新