在 R 中创建具有多列和 N/As 的边缘列表
Creating an edgelist with multiple columns and N/As in R
我正在用 R 开发 igraph。
我有一个包含 29 列的数据框 (df) - 有些行都有值,有些行有 NA
s。
看起来有点像这样:
V1 V2 V3 V4
1 1 2 3 NA
2 2 3 NA NA
3 2 4 1 NA
4 1 NA NA NA
但更大。我无法从这些数据创建边缘列表并尝试过:
myPairs <- apply(t(df), 2, function(x) t(combn(x[!is.na(x)], 2)))
但不断收到此错误:
Error in h(simpleError(msg, call)) : error in evaluating the argument
'x' in selecting a method for function 't': n < m
输出应如下所示:
col1 col2
1 1 2
2 1 3
3 2 3
4 2 3
5 2 4
6 2 1
7 1 4
非常感谢任何帮助!
这是一种方法。
确保您的 data.frame 是数字:
df <- sapply(df, as.numeric)
您可以像之前那样将 apply
与 combn
一起使用,但首先使用 na.omit
删除缺失值。您还可以检查 length
,这样如果一行中只有一个值,您可以跳过它。
do.call(rbind, apply(df, 1, function(x) {
y <- na.omit(x)
if (length(y) > 1)
t(combn(y, 2))
}))
输出
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 2 3
[4,] 2 3
[5,] 2 4
[6,] 2 1
[7,] 4 1
我正在用 R 开发 igraph。
我有一个包含 29 列的数据框 (df) - 有些行都有值,有些行有 NA
s。
看起来有点像这样:
V1 V2 V3 V4
1 1 2 3 NA
2 2 3 NA NA
3 2 4 1 NA
4 1 NA NA NA
但更大。我无法从这些数据创建边缘列表并尝试过:
myPairs <- apply(t(df), 2, function(x) t(combn(x[!is.na(x)], 2)))
但不断收到此错误:
Error in h(simpleError(msg, call)) : error in evaluating the argument 'x' in selecting a method for function 't': n < m
输出应如下所示:
col1 col2
1 1 2
2 1 3
3 2 3
4 2 3
5 2 4
6 2 1
7 1 4
非常感谢任何帮助!
这是一种方法。
确保您的 data.frame 是数字:
df <- sapply(df, as.numeric)
您可以像之前那样将 apply
与 combn
一起使用,但首先使用 na.omit
删除缺失值。您还可以检查 length
,这样如果一行中只有一个值,您可以跳过它。
do.call(rbind, apply(df, 1, function(x) {
y <- na.omit(x)
if (length(y) > 1)
t(combn(y, 2))
}))
输出
[,1] [,2]
[1,] 1 2
[2,] 1 3
[3,] 2 3
[4,] 2 3
[5,] 2 4
[6,] 2 1
[7,] 4 1