Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于R中的另一个值组合行值_R_Combinatorics - Fatal编程技术网

基于R中的另一个值组合行值

基于R中的另一个值组合行值,r,combinatorics,R,Combinatorics,我需要做一个网络可视化,我有数据,但还没有正确的格式!在R中的数据帧中,数据如下所示: Title Name Article1 Johnson Article1 Hansson Article1 Michaels Article2 Nielsson Article2 Madsen Article2 Shannon Article2 Paddington 我想找到基于标题的名称组合,即合作作者,因此是这种格式的输出 Source Ta

我需要做一个网络可视化,我有数据,但还没有正确的格式!在R中的数据帧中,数据如下所示:

Title       Name
Article1    Johnson
Article1    Hansson
Article1    Michaels
Article2    Nielsson
Article2    Madsen
Article2    Shannon
Article2    Paddington
我想找到基于标题的名称组合,即合作作者,因此是这种格式的输出

Source     Target      Title
Johnson    Hansson     Article1
Johnson    Michaels    Article1
Hansson    Michaels    Article1
Nielsson   Madsen      Article2
Nielsson   Shannon     Article2
Nielsson   Paddington  Article2
Madsen     Shannon     Article2
Madsen     Paddington  Article2
Shannon    Paddington  Article2

网络是无向的,所以源/目标只是列名来说明。那么我如何在R中做到这一点呢?我肯定有一个简单的方法,但我找不到。

试试这个,在
base
R:

 combos<-tapply(df$Name,df$Title,function(x) t(combn(x,2)))
 cbind(setNames(as.data.frame(do.call(rbind,combos)),c("Source","Target")),Title=rep(names(combos),vapply(combos,nrow,1L)))

#    Source     Target    Title
#1  Johnson    Hansson Article1
#2  Johnson   Michaels Article1
#3  Hansson   Michaels Article1
#4 Nielsson     Madsen Article2
#5 Nielsson    Shannon Article2
#6 Nielsson Paddington Article2
#7   Madsen    Shannon Article2
#8   Madsen Paddington Article2
#9  Shannon Paddington Article2

combos这里有一个可能的解决方案,使用
data.table
和新的
tstrsplit
函数

library(data.table) # v >= 1.9.5
setDT(df)[, setNames(tstrsplit(combn(Name, 2, toString, simplify = FALSE), ", "), 
                     c("Source", "Target")), 
          by = Title]
#       Title   Source     Target
# 1: Article1  Johnson    Hansson
# 2: Article1  Johnson   Michaels
# 3: Article1  Hansson   Michaels
# 4: Article2 Nielsson     Madsen
# 5: Article2 Nielsson    Shannon
# 6: Article2 Nielsson Paddington
# 7: Article2   Madsen    Shannon
# 8: Article2   Madsen Paddington
# 9: Article2  Shannon Paddington

谢谢你的快速回答!它几乎可以工作-唯一的问题是,我得到的不是源/目标列中的名称(Johnson等),而是数字。很可能您的列是
因子
(我已经用
字符
向量进行了测试)。在第一行中使用
as.character(df$Name)
更改
df$Name
,应该可以使用。谢谢!很有魅力:)谢谢你的回答。但是,我在转置中得到以下错误消息error(strsplit(as.character(x),…),fill=fill,ignore.empty=FALSE):对象“CtrTranspose”不是found@nicola你的也很好。@tkoz_dk你从Github安装开发版本了吗?@DavidArenburg:是的。然后我重新启动了R,现在它工作了:)谢谢!