合并数据文件

时间:2017-04-07 10:13:31

标签: r social-networking

我在R中有以下数据框:

Id   Class
@a    64
@b    7
@c    98 

第二个数据框:

SOURCE    TARGET 
@d        @b
@c        @a 

这描述了社交网络中的节点和边缘。用户(前面都有@)属于特定社区,并且该列号列在列类中。要分析列之间的连接,我想合并这些数据帧并创建一个如下所示的新数据框:

SOURCE    TARGET    SOURCE.Class    TARGET.Class 
@a        @i        56               2
@f        @k        90               49 

当我尝试merge() R停止响应并且我需要终止R.数据帧构成20000(节点文件)和30000(边缘文件)行。

然后我想知道给定源类中有多少记录具有相同的目标类和类之间的连接百分比。

如果有人能帮助我,我会很高兴,因为我对R很新。

修改 我想我设法通过此代码使用match()而不是merge()创建列(rt_node包含列“id”,“class”和rt_node包含列“source”,“target”):

#match source in rt_edges with id in rt_node
match(rt_edges$Source,rt_nodes$id)

#match target in rt_edges with id in rt_node
match(rt_edges$Target,rt_nodes$id)

#create source_class 
rt_nodes$modularity_class[match(rt_edges$Source,rt_nodes$id)]
rt_edges$Source_Class=rt_nodes$modularity_class[match(rt_edges$Source,rt_nodes$id)]

#create target_class
rt_nodes$modularity_class[match(rt_edges$Target,rt_nodes$id)]
rt_edges$Target_Class=rt_nodes$modularity_class[match(rt_edges$Target,rt_nodes$id)]

现在我只需要弄清楚如何找到每个类中的连接百分比以及与其他类的连接百分比。关于如何做到这一点的任何提示?

1 个答案:

答案 0 :(得分:1)

问题1:合并

这需要两个单独的联接操作:在rt_edgesrt_nodesTarget的初始联接以及rt_nodesSourcert_edges的后续联接}。此外,data.table的所有行都应出现在结果中。

以下方法使用library(data.table) rt_nodes <- fread( "id Class @a 64 @b 7 @c 98 @d 23 @f 59") rt_edges <-fread( "Source Target @d @b @c @a @a @e") 。 (我已经采用了OP在其编辑的Q代码中使用的变量和列的命名,但请注意,这与OP给出的样本数据不一致。)

读取数据

@f

请注意,OP提供的示例数据中添加了其他行以演示

的效果
  • 未参与边缘的节点(@a -> @e)和
  • 边缘(rt_nodes),其中data.table缺少一个ID。

双重加入

默认情况下,rt_edges中的联接是正确的联接。因此,result <- rt_nodes[rt_nodes[rt_edges, on = c(id = "Target")], on = c(id = "Source")] # rename columns setnames(result, c("Source", "Source.Class", "Target", "Target.Class")) result # Source Source.Class Target Target.Class #1: @d 23 @b 7 #2: @c 98 @a 64 #3: @a 64 @e NA 出现在右侧。

NA

结果中出现所有三条边。 @e表示rt_nodes中缺少result[, .(.N, share_of_occurrence_in_Target.Class = sum(Source.Class == Target.Class)/.N), by = Source.Class] # Source.Class N share_of_occurrence_in_Target.Classs #1: 23 1 0 #2: 98 1 0 #3: 64 1 NA

问题2

OP包含了第二个问题(同时也创建了a new post

  

然后我想知道给定源类中有多少记录具有相同的目标类和类之间的连接百分比。

04-09 09:03:23.509 2722-2722/com.pz.mediatonmessanger E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.pz.mediatonmessanger, PID: 2722
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.pz.mediatonmessanger/com.pz.mediatonmessanger.ChatDialogActivity}: java.lang.InstantiationException: class com.pz.mediatonmessanger.ChatDialogActivity has no zero argument constructor
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
    Caused by: java.lang.InstantiationException: class com.pz.mediatonmessanger.ChatDialogActivity has no zero argument constructor
    at java.lang.Class.newInstance(Class.java:1563)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
    Caused by: java.lang.NoSuchMethodException: <init> []
    at java.lang.Class.getConstructor(Class.java:531)
    at java.lang.Class.getDeclaredConstructor(Class.java:510)
    at java.lang.Class.newInstance(Class.java:1561)
    at android.app.Instrumentation.newActivity(Instrumentation.java:1065)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
    at android.app.ActivityThread.access$800(ActivityThread.java:144)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5221)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

计数为1,此处的份额为0,因为样本数据不包含足够的匹配类的情况。但是,代码已经过验证,可以使用the other post of the OP中提供的数据。