首页 > 解决方案 > 为什么“pivot_wider”不会对值求和,而只是将每个值列为字符

问题描述

我有一个看起来像这样的df:

在此处输入图像描述

我想用 pivot_wider更广泛的格式来总结它。预期结果将如下所示:

在此处输入图像描述

但我的结果是这样的:

在此处输入图像描述

它没有添加每个计数,而是将每个计数1作为字符。我做错什么了?

我的示例数据和上表构建的代码是:

df<-structure(list(Class = c("A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A"), `Test date` = c(10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10), Score = c("LOW", 
"LOW", "LOW", "LOW", "LOW", "LOW", "LOW", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "HIGH", "HIGH", "HIGH", "HIGH", "HIGH", "HIGH"
), Base_Score = c("LOW", "LOW", "LOW", "LOW", "NORMAL", "NORMAL", 
"HIGH", "LOW", "LOW", "LOW", "LOW", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", "NORMAL", 
"NORMAL", "NORMAL", "HIGH", "HIGH", "LOW", "NORMAL", "NORMAL", 
"NORMAL", "HIGH", "HIGH"), Number_student = c(44, 44, 44, 44, 
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 
44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 
44, 44, 44, 44, 44, 44, 44, 44, 44), result = c("1", "1", "1", 
"1", "1", "1", "NA", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", 
"1", "1", "1", "1")), row.names = c(NA, -45L), class = c("tbl_df", 
"tbl", "data.frame"))

df %>%
  mutate(result=as.numeric(df))%>%
  pivot_wider(names_from = Base_Score,
              values_from = result)

标签: r

解决方案


我们需要values_fnsum. 如果有重复元素,默认情况下,pivot_wider返回list

library(dplyr)
library(tidyr)
df %>% 
    mutate(result = as.numeric(result)) %>% 
    pivot_wider(names_from = Base_Score, 
        values_from = result, values_fn = list(result = sum))

-输出

# A tibble: 3 × 7
  Class `Test date` Score  Number_student   LOW NORMAL  HIGH
  <chr>       <dbl> <chr>           <dbl> <dbl>  <dbl> <dbl>
1 A              10 LOW                44     4      2    NA
2 A              10 NORMAL             44     4     26     2
3 A              10 HIGH               44     1      3     2

推荐阅读