[英]All possible combinations of variable R
我有一个数据框中几个主题的变量和值列表(见下文)。 我正在使用 R/R Studio 并希望重新格式化数据以返回每个可能的变量组合,以及每个主题的相应值。 实际的数据集比这大得多,因此任何以编程方式进行的方式都将不胜感激。
谢谢
我目前的数据
Variable Subject Value
V1 A 1
V1 B 0
V1 C 1
V2 A 0
V2 B 1
V2 C 0
V3 A 1
V3 B 1
V3 C 1
我想要的 output :
Subject Variable 1 Variable 2 Value 1 Value 2
A V1 V2 1 0
A V1 V3 1 1
A V2 V3 0 1
B V1 V2 0 1
B V1 V3 0 1
B V2 V3 1 1
C V1 V2 1 0
C V1 V3 1 1
C V2 V3 0 1
您可以使用combn
为每个Subject
创建Variable
和Value
列的所有可能组合。
library(dplyr)
library(tidyr)
create_data_frame <- function(var, val) {
tab1 <- setNames(data.frame(t(combn(var, 2))), paste0('Variable', 1:2))
tab2 <- setNames(data.frame(t(combn(val, 2))), paste0('Value', 1:2))
cbind(tab1, tab2)
}
df %>%
group_by(Subject) %>%
summarise(data = list(create_data_frame(Variable, Value))) %>%
unnest(col = data)
# Subject Variable1 Variable2 Value1 Value2
# <chr> <chr> <chr> <int> <int>
#1 A V1 V2 1 0
#2 A V1 V3 1 1
#3 A V2 V3 0 1
#4 B V1 V2 0 1
#5 B V1 V3 0 1
#6 B V2 V3 1 1
#7 C V1 V2 1 0
#8 C V1 V3 1 1
#9 C V2 V3 0 1
基本 R 解决方案,在 R 版本 4.1.0 中使用本机管道
df <- read.table(text = 'Variable Subject Value
V1 A 1
V1 B 0
V1 C 1
V2 A 0
V2 B 1
V2 C 0
V3 A 1
V3 B 1
V3 C 1', header = T)
t(combn(unique(df$Variable), 2)) |> as.data.frame() |>
setNames(c('Variable1', 'Variable2')) |>
merge(df, by.x = 'Variable1', by.y = 'Variable') |>
merge(df, by.x = c('Variable2', 'Subject'), by.y = c('Variable', 'Subject'), suffixes = c('1', '2'))
#> Variable2 Subject Variable1 Value1 Value2
#> 1 V2 A V1 1 0
#> 2 V2 B V1 0 1
#> 3 V2 C V1 1 0
#> 4 V3 A V2 0 1
#> 5 V3 A V1 1 1
#> 6 V3 B V1 0 1
#> 7 V3 B V2 1 1
#> 8 V3 C V1 1 1
#> 9 V3 C V2 0 1
用期望的方式检查它
t(combn(unique(df$Variable), 2)) |> as.data.frame() |>
setNames(c('Variable1', 'Variable2')) |>
merge(df, by.x = 'Variable1', by.y = 'Variable') |>
merge(df, by.x = c('Variable2', 'Subject'), by.y = c('Variable', 'Subject'), suffixes = c('1', '2')) -> df_new
df_new[order(df_new$Subject),c(2,3,1,4,5)]
#> Subject Variable1 Variable2 Value1 Value2
#> 1 A V1 V2 1 0
#> 4 A V2 V3 0 1
#> 5 A V1 V3 1 1
#> 2 B V1 V2 0 1
#> 6 B V1 V3 0 1
#> 7 B V2 V3 1 1
#> 3 C V1 V2 1 0
#> 8 C V1 V3 1 1
#> 9 C V2 V3 0 1
由reprex package (v2.0.0) 于 2021 年 5 月 19 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.