基于R中的另一个值组合行值
我需要做一个网络可视化,我有数据,但还没有正确的格式!在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
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,现在它工作了:)谢谢!