r - 旋转更宽返回 1 列?

标签 r tidyverse

我正在尝试格式化我的 base_df显示users_id按观看的节目组织。

base_df:

enter image description here

base_df <- structure(list(category = c("News", "News", "Sports", "Sports", 
"sports", "Sports", "Sports", "sports"), programs = c("News A", 
"News B", "Sports A", "Sports B", "sports C", "Sports A", "Sports B", 
"sports C"), users_id = c(10003831, 10003823, 10003841, 10003823, 
10003851, 10003851, 10003851, 10003854)), row.names = c(NA, -8L
), class = c("tbl_df", "tbl", "data.frame"))

所需输出:

enter image description here

我认为pivot_longer可以在这里帮助我:

我尝试使用它,但它返回一个仅包含 users_ids 的 df。我做错了什么?

b <- pivot_wider(
  base_df,
  id_cols = users_id,
  names_from = programs
)

enter image description here

最佳答案

您不需要转换为宽格式,而是聚合,即

library(dplyr)

base_df %>% 
 filter(category %in% c('Sports', 'sports')) %>% 
 group_by(users_id) %>% 
 summarise(how_many = n(), 
           which = toString(programs))


# A tibble: 4 x 3
#  users_id how_many which                       
#     <dbl>    <int> <chr>                       
#1 10003823        1 Sports B                    
#2 10003841        1 Sports A                    
#3 10003851        3 sports C, Sports A, Sports B
#4 10003854        1 sports C         

   

关于r - 旋转更宽返回 1 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63154140/

相关文章:

r - 将多个级别编码为 2 个因子标签

将多列中的不同值重新编码为因子

R:将数据框列名称与数字连接

通过在 purrr 中按元素求和来减少列表

r - 按因子级别数对 R 数据框进行排序

r - 将大列表转换为数据框的快速方法

r - 将 map 上的点限制为一层

r - 根据数据框中的条件填充新列

r - 将字符串转换为符号,然后转换为 !! 识别的 quosure在整洁的宇宙中

r - 如何使用 dplyr 对另一个表中的数据进行计算?