有没有办法通过R中的矩阵/df循环来创建邻接矩阵?
我试图在data.frame中循环53行,并用结果创建一个邻接矩阵。然而,由于循环无法正确运行,我的努力继续陷于停顿 我试图创建匹配项,并应用了大量的有没有办法通过R中的矩阵/df循环来创建邻接矩阵?,r,loops,apply,R,Loops,Apply,我试图在data.frame中循环53行,并用结果创建一个邻接矩阵。然而,由于循环无法正确运行,我的努力继续陷于停顿 我试图创建匹配项,并应用了大量的count()函数,但没有成功 MRE:(事实上,数据要大得多,所以我的唯一搜索实际上是217k个元素) df1我认为您应该检查tf(术语频率)算法来进行文本挖掘。下面是一个有趣的示例方法,它使用库(quanteda)创建带有计数的矩阵。然后,您可以根据计数进行自己喜欢的搜索: library("tibble") library("quanteda
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)等]*可能有助于控制公羊的过度杀戮,这就是最终状态的好处。很乐意帮忙。权重问题应该在不同的帖子上提问,因为你需要清楚地描述和展示你的意思,并认真尝试解决。