如何合并两列以创建新列?

时间:2019-03-27 05:33:11

标签: r dplyr

我有这个数据。

     datetime user_id song_id
1  2019-03-26       6      31
2  2019-03-26       4      30
3  2019-03-26       3      31
4  2019-03-26       9      34
5  2019-03-26      10      21
6  2019-03-26       8      38
7  2019-03-26       8      33
8  2019-03-26       8      28
9  2019-03-26       6      30

我想做第三列,所以数据看起来像这样

     datetime user_id song_id    usersong_id
1  2019-03-26       6      31    631
2  2019-03-26       4      30    430
3  2019-03-26       3      31    331
4  2019-03-26       9      34    934
5  2019-03-26      10      21    1021
6  2019-03-26       8      38    838
7  2019-03-26       8      33    833
8  2019-03-26       8      28    828
9  2019-03-26       6      30    630

我尝试了这段代码。

df %>%
  group_by(user_id, song_id) %>% 
  summarize(count = n()) %>% 
  mutate(usersong_id = c(user_id, song_id))

但是,它给了我这个错误:

  

错误:列usersong_id的长度必须为1(组大小),而不是2

2 个答案:

答案 0 :(得分:2)

我们可以使用unite

library(dplyr)
library(tidyr)
df %>% 
     unite(user_song_id, user_id, song_id, sep = "", remove = FALSE) %>%
     select(names(df), user_song_id)
#    datetime user_id song_id user_song_id
#1 2019-03-26       6      31          631
#2 2019-03-26       4      30          430
#3 2019-03-26       3      31          331
#4 2019-03-26       9      34          934
#5 2019-03-26      10      21         1021
#6 2019-03-26       8      38          838
#7 2019-03-26       8      33          833
#8 2019-03-26       8      28          828
#9 2019-03-26       6      30          630

答案 1 :(得分:2)

您可以使用以下任何一种方式:

df <- df %>%
  mutate(usersong_id = paste0(user_id, song_id))

df <- df %>%
  unite(user_song_id, user_id, song_id, sep = "", remove = FALSE)

df$usersong_id <- paste0(df$user_id, df$song_id)
相关问题