将变量的唯一组合作为向量存储在 R 中的数据框中
Store unique combinations of variables as a vector in a data frame in R
我有以下问题。
我有一个大data.frame。在这个 data.frame 中,有 7 个变量的 648 种不同组合。 data.frame 是该长度的 4 倍,共 2592 行。我想要做的是在 data.frame 中创建一个向量,它指示该行中的哪些组合。所以最后应该有一个向量,其中包含数字1-648,每四次。
最后应该是这样的,这里是两个变量和 3 种不同组合的示例。
a b distinct_combinations
<dbl> <chr> <dbl>
1 1 a 1
2 2 b 2
3 3 c 3
4 1 a 1
5 2 b 2
6 3 c 3
谢谢!
v1 = rep(seq(1:3),2)
v2 = rep(c("a","b","c"),2)
df = data.frame(v1,v2)
df$id = as.factor(paste(v1,v2,sep = ""))
levels(df$id) = seq(1:length(unique(df$id)))
您可以创建一个列并将其级别更改为数字
您可以 group_by
您想要的列并使用 group_indices
:
library(tidyverse)
data %>%
group_by(across(a:b)) %>%
mutate(distinct_combinations = group_indices())
# A tibble: 6 x 3
# Groups: a, b [3]
a b distinct_combinations
<int> <chr> <int>
1 1 a 1
2 2 b 2
3 3 c 3
4 1 a 1
5 2 b 2
6 3 c 3
您还可以排列您的列并使用 data.table::rleidv
:
data %>%
arrange(across(a:b)) %>%
mutate(distinct_combinations = data.table::rleidv(.))
数据
structure(list(a = c(1L, 2L, 3L, 1L, 2L, 3L), b = c("a", "b",
"c", "a", "b", "c")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
包 data.table 中的特殊符号 .GRP
本质上就是您要的:
.GRP is an integer, length 1, containing a simple group counter. 1 for the 1st group, 2 for the 2nd, etc. data.table documentation
library(data.table)
setDT(data) # change data to a data.table
data[, distinct_combinations := .GRP, by = .(a, b)]
我有以下问题。
我有一个大data.frame。在这个 data.frame 中,有 7 个变量的 648 种不同组合。 data.frame 是该长度的 4 倍,共 2592 行。我想要做的是在 data.frame 中创建一个向量,它指示该行中的哪些组合。所以最后应该有一个向量,其中包含数字1-648,每四次。
最后应该是这样的,这里是两个变量和 3 种不同组合的示例。
a b distinct_combinations
<dbl> <chr> <dbl>
1 1 a 1
2 2 b 2
3 3 c 3
4 1 a 1
5 2 b 2
6 3 c 3
谢谢!
v1 = rep(seq(1:3),2)
v2 = rep(c("a","b","c"),2)
df = data.frame(v1,v2)
df$id = as.factor(paste(v1,v2,sep = ""))
levels(df$id) = seq(1:length(unique(df$id)))
您可以创建一个列并将其级别更改为数字
您可以 group_by
您想要的列并使用 group_indices
:
library(tidyverse)
data %>%
group_by(across(a:b)) %>%
mutate(distinct_combinations = group_indices())
# A tibble: 6 x 3
# Groups: a, b [3]
a b distinct_combinations
<int> <chr> <int>
1 1 a 1
2 2 b 2
3 3 c 3
4 1 a 1
5 2 b 2
6 3 c 3
您还可以排列您的列并使用 data.table::rleidv
:
data %>%
arrange(across(a:b)) %>%
mutate(distinct_combinations = data.table::rleidv(.))
数据
structure(list(a = c(1L, 2L, 3L, 1L, 2L, 3L), b = c("a", "b",
"c", "a", "b", "c")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))
包 data.table 中的特殊符号 .GRP
本质上就是您要的:
.GRP is an integer, length 1, containing a simple group counter. 1 for the 1st group, 2 for the 2nd, etc. data.table documentation
library(data.table)
setDT(data) # change data to a data.table
data[, distinct_combinations := .GRP, by = .(a, b)]