R语言 按变量分组以创建新表

enyaitl3  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(94)

第一个表是手头的数据,我希望使用它创建表2。在第二个表中,评论类型是需要创建的重要变量。它是使用第一个表创建的。按用户和视频分组,我们需要确定是先发表悲伤评论还是先发表快乐评论(来自第一个表中的快乐列。是意味着评论是快乐的,而不是意味着评论是悲伤的)。如果用户在视频中的悲伤评论之前首先做出快乐评论,则评论_如果在唯一视频中对于唯一用户仅存在一种类型的评论(如在V2和V3中的用户a或在V1中的用户b的情况下的快乐或悲伤),则将其编码为无。
| 用户|视频|评论|快乐|
| --|--|--|--|
| 一|V1| 1 |没有|
| 一|V1| 2 |是的|
| 一|V1| 3 |没有|
| 一|V2| 4 |是的|
| 一|V3| 5 |没有|
| 一|V3| 6 |没有|
| 一|V4| 7 |是的|
| 一|V4| 8 |没有|
| 一|V4| 9 |没有|
| B| V1| 10 |没有|
| B| V1| 11 |没有|
| B| V5| 12 |是的|
| B| V5| 13 |是的|
| B| V5| 14 |没有|

df <- tibble(
  User = c("a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "b", "b", "b", "b"),
  Video = c("V1", "V1", "V1", "V2", "V3", "V3", "V4", "V4", "V4", "V1", "V1", "V5", "V5", "V5", "V5"),
  Comment = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15),
  Happy = c("No", "Yes", "No", "Yes", "No", "No", "Yes", "No", "No", "No", "No", "Yes", "Yes", "No", "No"))

字符串
| 用户|视频|评论类型|
| --|--|--|
| 一|V1|伤心|
| 一|V2|没有一|
| 一|V3|没有一|
| 一|V4|快乐|
| B| V1|没有一|
| B| V5|快乐|

cvxl0en2

cvxl0en21#

case_when非常简单:

df |>
  dplyr::summarise(`Comment Type` = dplyr::case_when(
    length(unique(Happy)) == 1 ~ "None",
    first(Happy)  == "Yes" ~ "Happy",
    first(Happy)  == "No" ~ "Sad"), .by = c(User, Video))

字符串
备注:
1.使用“Yes”和“No”表示TRUE和TRUE是不好的做法--它占用更多的空间,速度更慢,并且需要更长的代码。
1.您可以将length(unique(Happy)) == 1替换为n_distinct(Happy) == 1,就像Jon Spring删除的答案一样(归功于他们)。

相关问题