r - 创建列出不同观察的列
问题描述
我有一个看起来像这样的观察数据框(显示每个学期提供的大学课程的课程数量)。柱子很长,长度不一
spring summer fall
4a 5b 5c
4a 9c 11b
7c 5b 8a
... ... ...
我想重新格式化它,让它看起来像这样。首先,我想创建一个列“Course_Names”,它显示所有可能的不同课程的名称。然后,我想计算每学期提供的每门课程的部分数量。
Course_Names spring summer fall
4a 2 0 0
5b 0 2 0
5c 0 0 1
7c 1 0 0
8a 1 0 1
9c 0 1 0
11b 0 0 1
任何建议或相关帖子的链接将不胜感激!谢谢!
解决方案
在base R
中,一个选项是将stack
data.frame 转换为两列数据集并使用table
table(stack(df1))
# ind
#values spring summer fall
# 11b 0 0 1
# 4a 2 0 0
# 5b 0 2 0
# 5c 0 0 1
# 7c 1 0 0
# 8a 0 0 1
# 9c 0 1 0
或者在 中tidyverse
,我们可以用 重新整形为“长”格式pivot_longer
,得到count
并重新整形为“宽”
library(dplyr)
library(tidyr)
df1 %>%
pivot_longer(everything()) %>%
count(name, Course_Names = value) %>%
pivot_wider(names_from = name, values_from = n, values_fill = list(n = 0))
# A tibble: 7 x 4
# Course_Names fall spring summer
# <chr> <int> <int> <int>
#1 11b 1 0 0
#2 5c 1 0 0
#3 8a 1 0 0
#4 4a 0 2 0
#5 7c 0 1 0
#6 5b 0 0 2
#7 9c 0 0 1
数据
df1 <- structure(list(spring = c("4a", "4a", "7c"), summer = c("5b",
"9c", "5b"), fall = c("5c", "11b", "8a")), class = "data.frame", row.names = c(NA,
-3L))
推荐阅读
- django - 使用列表在 ModelMultipleChoiceField CheckboxSelectMultiple 小部件上设置初始值
- python - 2xRaspberry Pi nRF24L01 未连接
- python - 将列表从一个数据框扩展到另一个数据框 pandas
- c# - 如何在 C# 中正确管理 Qubit 的生命周期
- sql - ServiceStack ormlite 中是否有 unpivot 或 cross apply?
- python - 如果非空,则在列表中写入字典的值
- r - R光栅对象上的自动阈值
- php - 如何使 apply_filter 仅适用于 WooCommerce 中的特定产品?
- python - Python 3 打印样式
- swift - Swift 存储所有随机生成且不会再次生成的数字