首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建列,列出不同的观察结果

创建列,列出不同的观察结果
EN

Stack Overflow用户
提问于 2020-01-02 20:41:12
回答 2查看 83关注 0票数 2

我有一个数据框架的观察如下(显示每个学期提供的大学课程数量)。这些柱子很长,长度也不一样。

代码语言:javascript
复制
  spring   summer   fall
   4a       5b       5c
   4a       9c       11b
   7c       5b       8a 
   ...      ...      ...

我想把它重新格式化,让它看起来像这样。首先,我想创建一个列"Course_Names",它显示了所有不同课程的名称。然后,我想计算每学期每门课程的章节数。

代码语言:javascript
复制
   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        

如有任何建议或链接到相关帖子,将不胜感激!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-02 20:47:02

您可以通过收集数据,然后使用tidyr包中的这些函数再次传播数据,如下所示;

代码语言:javascript
复制
library(dplyr)
library(tidyr)

data <-
  data.frame(
    spring = c("4a", "4a", "7c"),
    summer = c("5b", "9c", "5b"),
    fall = c("5c", "11b", "8a")
  )

result <-
  data %>%
  gather(key = "Course_Names", value = "Course") %>%
  group_by(Course_Names, Course) %>%
  count() %>%
  spread(key = Course_Names, value = n) %>%
  replace(is.na(.), 0)
票数 2
EN

Stack Overflow用户

发布于 2020-01-02 20:42:31

base R中,一个选项是将data.frame放入一个两列数据集并使用table

代码语言:javascript
复制
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将其重塑为'long‘格式,获取count并将其重塑为'wide’

代码语言:javascript
复制
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

数据

代码语言:javascript
复制
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))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59569733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档