R 使用pivot_后进行总结

R 使用pivot_后进行总结,r,dplyr,tidyr,R,Dplyr,Tidyr,我正在尝试使用tidyr中的pivot\u执行基本分组。我想要的是商务旅行者和游客之间的平均评分。但是,我遇到了以下错误: Error: Problem with `mutate()` input `for_business`. x invalid 'labels'; length 2 should be 1 or 1 i Input `for_business` is `factor(for_business, labels = c("business", "to

我正在尝试使用
tidyr
中的
pivot\u
执行基本分组。我想要的是商务旅行者和游客之间的平均评分。但是,我遇到了以下错误:

Error: Problem with `mutate()` input `for_business`.
x invalid 'labels'; length 2 should be 1 or 1
i Input `for_business` is `factor(for_business, labels = c("business", "tourist"))`.
i The error occurred in group 2: property_id = 1002.
我的代码:

library(tidyverse)

bookings <- read_csv("bookings.csv")

bookings %>%
  group_by(property_id, for_business) %>%
  summarize(avg_review_score = mean(review_score, na.rm = TRUE)) %>%
  mutate(for_business = factor(for_business, labels = c("business", "tourist"))) %>%
  mutate(diff = business - tourist) %>%
  pivot_wider(names_from = for_business, values_from = avg_review_score) %>%
  summarize(avg_diff = mean(diff, na.rm = TRUE)) %>%
ungroup()

您尚未共享足够的数据,但可以尝试:

library(dplyr)
library(tidyr)

bookings %>%
  group_by(property_id, for_business) %>%
  summarize(avg_review_score = mean(review_score, na.rm = TRUE)) %>%
  ungroup %>%
  mutate(for_business = c("tourist", "business")[for_business + 1]) %>%
  pivot_wider(names_from = for_business, values_from = avg_review_score) %>%
  mutate(diff = business - tourist) %>%
  summarize(avg_diff = mean(diff, na.rm = TRUE))

在dput中,业务的
实际上是一个逻辑变量!!那个么你们为什么要把它转换成一个因子呢?在下一步中还有另一个错误!没有名为
business
tourism
的变量,因此如何计算
diff
?你到底想在这里做什么?是的,它工作了,但是你的输出给了我一个值
-0.573
,然而,我使用了as
mutate(for_business=factor(for_business,labels=c(“business”,“tourism”))%%>%,它给了我
0.573
。所以我有一个问题,这个平均值是负的吗?这就是你要寻找的额外信息吗?这是因为我将
TRUE
分配给“business”而
FALSE
分配给
tourism
,我猜你做的恰恰相反。总的来说,使用
abs
获取差值的绝对值并不重要。
library(dplyr)
library(tidyr)

bookings %>%
  group_by(property_id, for_business) %>%
  summarize(avg_review_score = mean(review_score, na.rm = TRUE)) %>%
  ungroup %>%
  mutate(for_business = c("tourist", "business")[for_business + 1]) %>%
  pivot_wider(names_from = for_business, values_from = avg_review_score) %>%
  mutate(diff = business - tourist) %>%
  summarize(avg_diff = mean(diff, na.rm = TRUE))