簡體   English   中英

以 R 中的分類列為條件整合來自另一個數據集的數據

[英]integrate data from another dataset conditional on a categorical column in R

我有兩個數據集。 一個有課程難度,另一個有學生名單和他們選修的課程。 以下是示例數據集:

library(tidyverse)
courses <- tibble(course_name = c("Adv Operating", "Art Intel", "CS Net"),
            dif = c(1, 5, 10))


student_records <- tibble(student = c("Corey", "Sibley", "Justin"),
                  spring_14_1 = c("Adv Operating", "Adv Operating", "CS Net"),
                  spring_14_2 = c("Art Intel", NA, "Art Intel"))

我想創建一個名為 spring_14_dif 的新專欄,增加他們課程的難度。 看起來像這樣的東西:

answer <- tibble(student = c("Corey", "Sibley", "Justin"),
                  spring_14_1 = c("Adv Operating", "Adv Operating", "CS Net"),
                  spring_14_2 = c("Art Intel", NA, "Art Intel"),
                  spring_14_dif = c(6, 1, 15))

我試過 case_when,但我無法破解它。 理想情況下,tidyverse 的答案是值得贊賞的,但我願意接受任何建議。

library(tidyverse)

student_records %>%
  pivot_longer(cols = starts_with("spring"), names_to = "Term", values_to = "Course") %>%
  left_join(courses, by = c("Course" = "course_name")) %>%
  group_by(student) %>%
  summarise(spring_14_dif = sum(dif, na.rm = T)) %>%
  left_join(student_records)

# A tibble: 3 x 4
  student spring_14_dif spring_14_1   spring_14_2
  <chr>           <dbl> <chr>         <chr>      
1 Corey               6 Adv Operating Art Intel  
2 Justin             15 CS Net        Art Intel  
3 Sibley              1 Adv Operating NA         

暫無
暫無

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

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