通过复制行合并r数据集列
我有一个7列的数据集。其中一列显示课程群集编号(1-9,可以有多个编号,如1,4,5,6),有3列(AH、SS、QS)根据群集编号具有逻辑值:如果1-3中有一个编号,则第1列为真,依此类推。结构如下:通过复制行合并r数据集列,r,dataset,R,Dataset,我有一个7列的数据集。其中一列显示课程群集编号(1-9,可以有多个编号,如1,4,5,6),有3列(AH、SS、QS)根据群集编号具有逻辑值:如果1-3中有一个编号,则第1列为真,依此类推。结构如下: 'data.frame': 213 obs. of 7 variables: $ Major : chr "BUS" "BUS" "BUS" "BUS" ... $ CourseNumber:
'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。您可以透视数据,以便列名(AH、SS、QS)显示在一列中,逻辑值显示在另一列中,然后在新的逻辑列中筛选该数据集中值为TRUE的行。这可以通过使用
tidyr
软件包中的pivot\u 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