r - 为什么“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)
解决方案
我们需要values_fn
做sum
. 如果有重复元素,默认情况下,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
推荐阅读
- node.js - 使用打字稿时变得未定义
- opengl - 在 DSA 代码的更新循环中是否使用 glBindVertexArray
- android - 在android中写入现有JSON文件时遇到问题
- arrays - 将 setState 反应为数组,然后 console.log(array) 返回填充的对象数组,但 console.log(array.length) 为 0
- c# - C# & wpf - ListBox-Label-ComboBox 之间的 (OneWay-Mode) 链绑定的意外行为
- dart - 后台并发复制 GC 释放 - Flutter
- android - 在 View Model 中执行多个 Async 操作并使用 MVVM 更新 View
- angular - 如何让 Angular 使用我的 ssl 证书?
- python-3.x - 深度学习中无法在动态链接库中定位程序入口点
- azure - 未捕获的异常:AADSTS65001:即使我已将应用重新授权为管理员