在数据帧上应用组合函数并保存为单个 list/dataframe
Applying combine function over dataframe and saving as a single list/dataframe
我正在尝试创建网络。我有一个数据框:
。 . v1.v2.v3
1/ .1 ... 2.... 3
2/ .3 ... 4 .. 7
3/。 6 ...11 。 9
我希望在每一行中找到所有可能的组合。例如,第一行的值为 1、2、3,因此结果为 (1, 2) (1, 3) (2, 3)。然后我将继续查找仅在第二行 3、4、7 返回 (3, 4) (3, 7) (4, 7) 中的值之间的组合。
现在我希望按行执行此功能,然后将所有结果组合成一个边缘列表来创建网络。
我已经尝试了几个小时的 for functions、apply 和 combn 迭代,但我似乎无法让它工作。
有没有人知道如何处理这个问题?
最后,我对R比较陌生,有什么方法可以分解或者一步步解决吗?如果您可以使用简单的函数,例如 apply、for 循环和其他东西而不是奇怪的特定函数,我将不胜感激。这样我就可以查看您的想法并从中学习,以便以后将它们应用于其他问题。
你们可能非常亲密
(虽然你应该 post 你以后尝试的代码,
并为您的数据使用 dput
之类的东西)。
使用apply
的问题是它会尝试自动简化
(对于单个向量或矩阵之类的东西),
并且由于 combn
returns 矩阵,
你绝对不想简化。
当遇到以下情况时,您应该使用 lapply
:
lapply(1L:nrow(your_data_frame), function(i) { combn(your_data_frame[i,], m=2L) })
我正在尝试创建网络。我有一个数据框:
。 . v1.v2.v3
1/ .1 ... 2.... 3
2/ .3 ... 4 .. 7
3/。 6 ...11 。 9
我希望在每一行中找到所有可能的组合。例如,第一行的值为 1、2、3,因此结果为 (1, 2) (1, 3) (2, 3)。然后我将继续查找仅在第二行 3、4、7 返回 (3, 4) (3, 7) (4, 7) 中的值之间的组合。
现在我希望按行执行此功能,然后将所有结果组合成一个边缘列表来创建网络。
我已经尝试了几个小时的 for functions、apply 和 combn 迭代,但我似乎无法让它工作。
有没有人知道如何处理这个问题?
最后,我对R比较陌生,有什么方法可以分解或者一步步解决吗?如果您可以使用简单的函数,例如 apply、for 循环和其他东西而不是奇怪的特定函数,我将不胜感激。这样我就可以查看您的想法并从中学习,以便以后将它们应用于其他问题。
你们可能非常亲密
(虽然你应该 post 你以后尝试的代码,
并为您的数据使用 dput
之类的东西)。
使用apply
的问题是它会尝试自动简化
(对于单个向量或矩阵之类的东西),
并且由于 combn
returns 矩阵,
你绝对不想简化。
当遇到以下情况时,您应该使用 lapply
:
lapply(1L:nrow(your_data_frame), function(i) { combn(your_data_frame[i,], m=2L) })