如何将多标签数据框滚动到 R 中的单列中
how to roll a multilabel dataframe into single column in R
我有以下数据框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
我相信我的例子比冗长的解释更清楚。以防万一。仅当即席结果的值为 TRUE 时,我想将我的所有结果(在我的情况下为 Y1 和 Y2)滚动到单个 YCOMBIN 列中。如果一个 ID 在结果上有超过 1 个 TRUE 值,那么我显然可以重复 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))
这里有两个选项。
使用 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:]]"))
我有以下数据框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
我相信我的例子比冗长的解释更清楚。以防万一。仅当即席结果的值为 TRUE 时,我想将我的所有结果(在我的情况下为 Y1 和 Y2)滚动到单个 YCOMBIN 列中。如果一个 ID 在结果上有超过 1 个 TRUE 值,那么我显然可以重复 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))
这里有两个选项。
使用 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:]]"))