【问题标题】:Merging r dataset columns by copying rows通过复制行合并 r 个数据集列
【发布时间】:2020-07-23 22:37:18
【问题描述】:

我有一个包含 7 列的数据集。其中一列显示课程集群编号(1-9,可以有多个数字,如 1、4、5、6),并且有 3 列(AH、SS、QS)根据集群编号具有逻辑值:如果 1-3 中有数字,则第一列为 True,依此类推。这是结构:

'data.frame':   213 obs. of  7 variables:
 $ Major       : chr  "BUS" "BUS" "BUS" "BUS" ...
 $ CourseNumber: chr  "101" "105" "109" "110" ...
 $ Title       : chr  "Introduction to Business" "Foundations of Management" "Business Math" "Applied Statistics" ...
 $ Number      : chr  "4, 5" "5" "7, 8, 9" "7, 8, 9" ...
 $ AH          : logi  FALSE FALSE FALSE FALSE TRUE FALSE ...
 $ SS          : logi  TRUE TRUE FALSE FALSE TRUE TRUE ...
 $ QS          : logi  FALSE FALSE TRUE TRUE FALSE FALSE ...

我想像这样将最后 3 列合并为 1 列:例如,如果 AH、SS、QS 的值为 T、T、F,则该行将被复制到 2,其中一行中的数据将是 AH,在第二行 - SS。

【问题讨论】:

    标签: r dataset


    【解决方案1】:

    您可以对数据进行透视,以便列名(AH、SS、QS)出现在一个列中,而逻辑值出现在另一列中,然后您在此数据集中过滤新逻辑中值为 TRUE 的行柱子。这可以通过使用 tidyr 包中的 pivot_longer 来完成:

      library(tidyr)
      library(dplyr)  
    
      data %>%
        pivot_longer(cols = AH:QS, # columns that will be pivotted 
                     names_to = "Variable", # Column name of the 'variable' column
                     values_to = "LogVal") %>% # column name of the logical value column
        filter(LogVal) %>% # filter only rows that contain a TRUE
        select(-LogVal) # remove the logical column
    

    【讨论】:

      猜你喜欢
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2021-08-10
      相关资源
      最近更新 更多