如何在R中将多标签数据帧滚动到单个列中

如何在R中将多标签数据帧滚动到单个列中,r,data-manipulation,multilabel-classification,R,Data Manipulation,Multilabel Classification,我有以下数据框originalData ID Y1 Y2 Y3 X1 X2 X3 1 111 TRUE TRUE FALSE 12 junior 45.55 2 112 FALSE FALSE TRUE 15 junior 458.54 3 113 TRUE TRUE FALSE 16 senior 48.79 我想得到以下结果 ID YCOMBIN X1 X2 X3 1 111 Y1 12 junior

我有以下数据框
originalData

   ID    Y1    Y2    Y3 X1     X2     X3
1 111  TRUE  TRUE FALSE 12 junior  45.55
2 112 FALSE FALSE  TRUE 15 junior 458.54
3 113  TRUE  TRUE FALSE 16 senior  48.79
我想得到以下结果

   ID YCOMBIN X1     X2     X3
1 111      Y1 12 junior  45.55
2 111      Y2 12 junior  45.55
3 112      Y3 15 junior 458.54
4 113      Y1 16 senior  48.79
5 113      Y2 16 senior  48.79
我相信我的例子比冗长的解释更清楚。如果不是这样的话。仅当临时结果的值为真时,我想将我的所有结果(在我的示例中为Y1和Y2)滚动到一个YCOMBIN列中。如果一个ID在结果上有超过1个真值,那么我可以很明显地重复ID和所有预测值(X1和X2)

达到预期效果的最佳方法是什么

数据来源:

originalData <- structure(list(ID = 111:113, Y1 = c(TRUE, FALSE, TRUE), Y2 = c(TRUE, 
FALSE, TRUE), Y3 = c(FALSE, TRUE, FALSE), X1 = c(12L, 15L, 16L
), X2 = structure(c(1L, 1L, 2L), .Label = c("junior", "senior"
), class = "factor"), X3 = c(45.55, 458.54, 48.79)), .Names = c("ID", 
"Y1", "Y2", "Y3", "X1", "X2", "X3"), class = "data.frame", row.names = c(NA, 
-3L)) 
originalData这里有两个选项

使用dplyr和tidyr

library(dplyr)
library(tidyr)
originalData %>%
  gather(key = "YCOMBIN", value = "value", Y1, Y2, Y3) %>%
  filter(value) %>%
  select(-value)
仅使用dplyr

library(dplyr)
originalData %>%
  mutate(
    YCOMBIN = ifelse(Y1, "Y1", ifelse(Y2, "Y2", "Y3"))
  ) %>%
  select(-matches("Y[[:digit:]]"))
这里有两个选择

使用dplyr和tidyr

library(dplyr)
library(tidyr)
originalData %>%
  gather(key = "YCOMBIN", value = "value", Y1, Y2, Y3) %>%
  filter(value) %>%
  select(-value)
仅使用dplyr

library(dplyr)
originalData %>%
  mutate(
    YCOMBIN = ifelse(Y1, "Y1", ifelse(Y2, "Y2", "Y3"))
  ) %>%
  select(-matches("Y[[:digit:]]"))

您好,谢谢您的回答,我喜欢第一个解决方案。但在现实生活中,我的Y很大,有不同的名字。是否可以使用类似于聚集(key=“YCOMBIN”,value=“value”,originalData[,2:4])的方法。我试过了,但不起作用。在这种情况下,您可以使用
聚集
<代码>聚集(key=“YCOMBIN”,value=“value”,names(originalData[,2:4])
。或
聚集(key=“YCOMBIN”,value=“value”,以(“Y”)开头
。请参阅
?dplyr::select()
,以了解诸如以()开头、以()结尾、匹配()之类的选项,…您好,谢谢您的回答,我喜欢第一个解决方案。但在现实生活中,我的Y很大,并且有不同的名称。是否可以使用类似于聚集的东西(key=“YCOMBIN”,value=“value”,originalData[,2:4])。我试过了,但不起作用。在这种情况下,您可以使用
聚集
聚集(key=“YCOMBIN”,value=“value)”,名称(originalData[,2:4])
。或
聚集(key=“YCOMBIN”,value=“value”,以(“Y”)开头
。请参阅
?dplyr::select()
,了解诸如以()开头、以()结尾、匹配()等选项。。。