【问题标题】:How do I concat two columns to make a new column? [duplicate]如何连接两列以创建新列? [复制]
【发布时间】:2019-08-17 14:51:08
【问题描述】:

我有这个数据。

     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

【问题讨论】:

  • 你能不能不要df$usersong_id <- paste0(df$user_id, df$song_id)

标签: r dplyr


【解决方案1】:

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

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)

【讨论】:

  • @akrun 哦没注意到。你太快了:-)
【解决方案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

【讨论】:

  • 题外话 - 你知道是否有任何方法可以使用 left_join 而不会将 .x.y 添加到同名列中?尤其是当它们具有相同的值时。
  • 如果列名冲突,.x 和 .y 将被添加
  • @Cauder 不清楚情况。如果您不想有额外的列,请在 left_join 之前对数据集列之一进行子集化,而不是相交列
  • 是的,但是列名相同且值相同的情况呢?我仍然添加了.x.y。没什么大不了的,只是好奇。
  • 啊哈,这真是个好主意
猜你喜欢
  • 1970-01-01
  • 2020-02-29
  • 2015-04-04
  • 2013-12-14
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2019-04-19
相关资源
最近更新 更多