我正在尝试格式化我的 base_df
显示users_id
按观看的节目组织。
base_df:
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"))
所需输出:
我认为pivot_longer
可以在这里帮助我:
我尝试使用它,但它返回一个仅包含 users_ids 的 df。我做错了什么?
b <- pivot_wider(
base_df,
id_cols = users_id,
names_from = programs
)
最佳答案
您不需要转换为宽格式,而是聚合,即
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/