将数据框中的所有列配对到 R 中的列表中
Pair all columns from dataframe into a list in R
假设我在 R 中有一个包含 4 列(a、b、c、d)的数据框。我想编写一个函数,它在列表列表中提供以下输出:
(a,b), (a,c), (a,d), (b,c), (b,d), (c,d)
显然我不想要像 (a,b) 和 (b,a) 这样的重复项,因为在这种情况下它们是相同的。
将 ?combn
与要为 data.frame 的名称的每个组合调用的函数一起使用。
df1 <- mtcars[1:4]
combn(names(df1), 2, function(x){
d <- df1[x]
names(d) <- x
d
}, simplify = FALSE)
使用以下数据:
df <- data.frame(a = 1,
b = 2,
c = 3,
d = 4)
您可以使用此公式创建列名列表:
df.list <- split(t(combn(names(df), 2)), seq(nrow(t(combn(names(df), 2)))))
> df.list
$`1`
[1] "a" "b"
$`2`
[1] "a" "c"
$`3`
[1] "a" "d"
$`4`
[1] "b" "c"
$`5`
[1] "b" "d"
$`6`
[1] "c" "d"
如果您还愿意显示这些专栏的内容,您可以跟进:
for (i in 1:length(df.list)) {
df.list[[i]] <- df[df.list[[i]]]
}
> df.list
$`1`
a b
1 1 2
$`2`
a c
1 1 3
$`3`
a d
1 1 4
$`4`
b c
1 2 3
$`5`
b d
1 2 4
$`6`
c d
1 3 4
假设我在 R 中有一个包含 4 列(a、b、c、d)的数据框。我想编写一个函数,它在列表列表中提供以下输出: (a,b), (a,c), (a,d), (b,c), (b,d), (c,d)
显然我不想要像 (a,b) 和 (b,a) 这样的重复项,因为在这种情况下它们是相同的。
将 ?combn
与要为 data.frame 的名称的每个组合调用的函数一起使用。
df1 <- mtcars[1:4]
combn(names(df1), 2, function(x){
d <- df1[x]
names(d) <- x
d
}, simplify = FALSE)
使用以下数据:
df <- data.frame(a = 1,
b = 2,
c = 3,
d = 4)
您可以使用此公式创建列名列表:
df.list <- split(t(combn(names(df), 2)), seq(nrow(t(combn(names(df), 2)))))
> df.list
$`1`
[1] "a" "b"
$`2`
[1] "a" "c"
$`3`
[1] "a" "d"
$`4`
[1] "b" "c"
$`5`
[1] "b" "d"
$`6`
[1] "c" "d"
如果您还愿意显示这些专栏的内容,您可以跟进:
for (i in 1:length(df.list)) {
df.list[[i]] <- df[df.list[[i]]]
}
> df.list
$`1`
a b
1 1 2
$`2`
a c
1 1 3
$`3`
a d
1 1 4
$`4`
b c
1 2 3
$`5`
b d
1 2 4
$`6`
c d
1 3 4