Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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/3/sql-server-2005/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中的矩阵/df循环来创建邻接矩阵?_R_Loops_Apply - Fatal编程技术网

有没有办法通过R中的矩阵/df循环来创建邻接矩阵?

有没有办法通过R中的矩阵/df循环来创建邻接矩阵?,r,loops,apply,R,Loops,Apply,我试图在data.frame中循环53行,并用结果创建一个邻接矩阵。然而,由于循环无法正确运行,我的努力继续陷于停顿 我试图创建匹配项,并应用了大量的count()函数,但没有成功 MRE:(事实上,数据要大得多,所以我的唯一搜索实际上是217k个元素) df1我认为您应该检查tf(术语频率)算法来进行文本挖掘。下面是一个有趣的示例方法,它使用库(quanteda)创建带有计数的矩阵。然后,您可以根据计数进行自己喜欢的搜索: library("tibble") library("quanteda

我试图在data.frame中循环53行,并用结果创建一个邻接矩阵。然而,由于循环无法正确运行,我的努力继续陷于停顿

我试图创建匹配项,并应用了大量的
count()
函数,但没有成功

MRE:(事实上,数据要大得多,所以我的唯一搜索实际上是217k个元素)


df1我认为您应该检查
tf(术语频率)算法来进行文本挖掘。下面是一个有趣的示例方法,它使用
库(quanteda)
创建带有计数的矩阵。然后,您可以根据计数进行自己喜欢的搜索:

library("tibble")
library("quanteda")


df1<-data.frame(col1=c(12345,123456,1234567,12345678),
                col2=c(54321,54432,12345,76543),
                col3=c(11234,12234,1234567,123345),
                col4=c(54321,54432,12345,76543))
df2<-apply(df1,2,paste, collapse = " ") # Passing it to string format
DocTerm <- quanteda::dfm(df2)
DocTerm

Document-feature matrix of: 4 documents, 10 features (60.0% sparse).
4 x 10 sparse Matrix of class "dfm"
      features
docs   12345 123456 1234567 12345678 54321 54432 76543 11234 12234 123345
  col1     1      1       1        1     0     0     0     0     0      0
  col2     1      0       0        0     1     1     1     0     0      0
  col3     0      0       1        0     0     0     0     1     1      1
  col4     1      0       0        0     1     1     1     0     0      0
库(“tibble”)
图书馆(“quanteda”)

df1我认为您应该检查
tf(术语频率)算法
以进行文本挖掘。下面是一个有趣的示例方法,它使用
库(quanteda)
创建带有计数的矩阵。然后,您可以根据计数进行自己喜欢的搜索:

library("tibble")
library("quanteda")


df1<-data.frame(col1=c(12345,123456,1234567,12345678),
                col2=c(54321,54432,12345,76543),
                col3=c(11234,12234,1234567,123345),
                col4=c(54321,54432,12345,76543))
df2<-apply(df1,2,paste, collapse = " ") # Passing it to string format
DocTerm <- quanteda::dfm(df2)
DocTerm

Document-feature matrix of: 4 documents, 10 features (60.0% sparse).
4 x 10 sparse Matrix of class "dfm"
      features
docs   12345 123456 1234567 12345678 54321 54432 76543 11234 12234 123345
  col1     1      1       1        1     0     0     0     0     0      0
  col2     1      0       0        0     1     1     1     0     0      0
  col3     0      0       1        0     0     0     0     1     1      1
  col4     1      0       0        0     1     1     1     0     0      0
库(“tibble”)
图书馆(“quanteda”)

DF1

虽然不清楚您的计数是如何导出的,甚至可能有一个类型(<代码> 75643!=76543代码/代码>),或者如果您是按行或列运行,则考虑嵌套的<代码> sPix< /Cult>和<代码>应用< <代码> >两个边距:

按行

search <- c(12345, 1234567, 76543, 54432)                                # ADJUSTED TYPO    
mat <- sapply(search, function(s) apply(df1, 1, function(x) s %in% x))   # 1 FOR ROW MARGIN

colnames(mat) <- search
rownames(mat) <- paste0("row", seq(nrow(df1)))

mat
#      12345 1234567 76543 54432
# row1  TRUE   FALSE FALSE FALSE
# row2 FALSE   FALSE FALSE  TRUE
# row3  TRUE    TRUE FALSE FALSE
# row4 FALSE   FALSE  TRUE FALSE

<代码>搜索> p>虽然不清楚您的计数是如何导出的,甚至可能有一个类型(<代码> 75643!=76543代码/代码>),或者如果您是按行或列运行的,则考虑嵌套的<代码> sPip> <代码>和<代码>应用< <代码> >两个边距:

按行

search <- c(12345, 1234567, 76543, 54432)                                # ADJUSTED TYPO    
mat <- sapply(search, function(s) apply(df1, 1, function(x) s %in% x))   # 1 FOR ROW MARGIN

colnames(mat) <- search
rownames(mat) <- paste0("row", seq(nrow(df1)))

mat
#      12345 1234567 76543 54432
# row1  TRUE   FALSE FALSE FALSE
# row2 FALSE   FALSE FALSE  TRUE
# row3  TRUE    TRUE FALSE FALSE
# row4 FALSE   FALSE  TRUE FALSE

search只是一个疑问,预期的输出是否为
df2
?确实如此。虽然,可能会是巨大的。一旦我弄明白了这一点,我将为变量(搜索向量中的ID)提供一个权重。例如,“12345”和“1234567”在df中出现n_次。基本上是一个“从”到“edgelist”,其中“从”是唯一id(搜索),而“到”是共享id。只是有一个疑问,预期的输出是否为df2?确实如此。虽然,可能会是巨大的。一旦我弄明白了这一点,我将为变量(搜索向量中的ID)提供一个权重。例如,“12345”和“1234567”在df中出现n_次。基本上是一个“From”到“edgelist”,其中“From”是唯一id(搜索),而“To”是共享id。您好,我运行了这个,但是我在exmaning(获取您显示的输出)方面遇到了问题。我试过了(DocTerm@i和其他人,但我只是看到了一堆列表)对我来说,它工作得很完美。检查你的R版本。那可能会引起麻烦。为了抽调工作人员,我希望另一个问题可以帮助您:嗯,这个例子很好,但是,当应用到更大的规模(唯一ID=75000)时,矩阵不可用。我将尝试更大的样本,看看它是否重复。我运行了这个,但我在exmaning(获取您显示的输出)方面遇到了困难。我试过了(DocTerm@i和其他人,但我只是看到了一堆列表)对我来说,它工作得很完美。检查你的R版本。那可能会引起麻烦。为了抽调工作人员,我希望另一个问题可以帮助您:嗯,这个例子很好,但是,当应用到更大的规模(唯一ID=75000)时,矩阵不可用。我将尝试更大的样本,看看它是否重复斯巴菲,这正是我所寻找的。但是,如果我们可以使用dplyr运行apply来获得权重计数,你知道吗?矩阵是巨大的(10obs=25mb),我有800个…所以这将加起来哈哈。我希望我可以循环使用count函数来获得数字在列中同时出现的次数……类似于[$Freq…12345:1234567(5)12445 | 76543(2)等]*可能有助于控制公羊的过度杀戮,这就是最终状态的好处。很乐意帮忙。权重问题应该在另一个帖子上提问,因为你需要清楚地描述和展示你的意思,并认真尝试解决。冻糕,这正是我想要的。但是,如果我们可以使用dplyr运行apply来获得权重计数,你知道吗?矩阵是巨大的(10obs=25mb),我有800个…所以这将加起来哈哈。我希望我可以循环使用count函数来获得数字在列中同时出现的次数……类似于[$Freq…12345:1234567(5)12445 | 76543(2)等]*可能有助于控制公羊的过度杀戮,这就是最终状态的好处。很乐意帮忙。权重问题应该在不同的帖子上提问,因为你需要清楚地描述和展示你的意思,并认真尝试解决。