簡體   English   中英

創建列出不同觀察結果的列

[英]Creating column that lists distinct observations

我有一個看起來像這樣的觀察數據框(顯示每個學期提供的大學課程的課程編號)。 柱子很長而且長短不一

  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 ,一個選項是將 data.frame stack成兩列數據集並使用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將其重塑為“long”格式,獲取count並重塑為“wide”

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))

您可以通過收集數據然后使用 tidyr 包中的這些函數再次傳播它來做到這一點,如下所示;

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM