在R中将非矩形数据导入为矩形

在R中将非矩形数据导入为矩形,r,social-networking,R,Social Networking,我需要加载社交网络数据,其中每个用户都有未知且可能大量的朋友,存储为以下格式的文本文件: UserId: FriendId1, FriendId2, ... 1: 12, 33 2: 3: 4, 6, 10, 15, 16 进入两列data.frame: UserId FriendId 1 1 12 2 1 33 3 3 4 4 3 6 5 3 10 6 3

我需要加载社交网络数据,其中每个用户都有未知且可能大量的朋友,存储为以下格式的文本文件:

UserId: FriendId1, FriendId2, ...
1: 12, 33
2:
3: 4, 6, 10, 15, 16
进入两列data.frame:

  UserId FriendId
1      1       12
2      1       33
3      3        4
4      3        6
5      3       10
6      3       15
7      3       16
你在R怎么做

读取、填充然后重新整形效率很低,因为它需要在内存中保留许多列,其中包含
NA


相关问题,以及。

这将读取行,然后逐个将它们解析为两列矩阵。这确实会产生字符值(因为文本行只是字符),但强制为数字则很简单:

 do.call(rbind,  sapply(rLines, function(L) { n <- sub( ":.+", "", L);
         items <- scan(text=sub(".+:","",L), sep=",");
     matrix( c( rep(n, length(items)), items), ncol=2)}
                        )
           )
#---------
     [,1] [,2]
[1,] "1"  "12"
[2,] "1"  "33"
[3,] "3"  "4" 
[4,] "3"  "6" 
[5,] "3"  "10"
[6,] "3"  "15"
[7,] "3"  "16"

<代码> > do.调用(rBin,sPrand,函数(l){n”,如果你真的有冒号作为定界符,那么只需使用<代码> Read .table >代码>使用<代码>标题> false <代码>将你的数据输入R,然后从我的“SPLITSTACKFILL”包中考虑使用<代码> CPLAX/CODE > .<
mydf
mydf <- read.table("test.txt", sep = ":", header = FALSE)
mydf
##   V1                V2
## 1  1            12, 33
## 2  2                  
## 3  3  4, 6, 10, 15, 16

library(splitstackshape)
cSplit(mydf, "V2", ",", "long")
##    V1 V2
## 1:  1 12
## 2:  1 33
## 3:  3  4
## 4:  3  6
## 5:  3 10
## 6:  3 15
## 7:  3 16