首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中具有重叠计数的编码矩阵

R中具有重叠计数的编码矩阵
EN

Stack Overflow用户
提问于 2016-11-07 17:22:30
回答 2查看 807关注 0票数 1

我精通Python,但我是一个完全的R新手,我在其他网站上找不到这个问题的答案,虽然它会有点冗长,但我希望它能对R库RQDA的其他用户有用。

本质上,RQDA是一个定性的研究工具,主要用于为文本文件分配代码(主题)。它有点像一支高亮笔,可以计算它突出显示的位置。

如果你放了很多文件,你可以在不同的地方用主题对文本进行编码(例如,一个采访制衣工人的项目可能是“设备”、“缝纫”、“亚麻”、“丝绸”、“照明”、“午休”等)。这使您能够计算使用了多少次不同的代码,在RQDA中,它提供了如下表输出:

代码语言:javascript
复制
rowid   cid fid codenamefilename    index1  index2  CodingLength
1   1   12  1   silk    2010-01-28  409     939     530
2   2   21  1   cotton  2010-01-28  1008    1172    164
3   3   12  1   silk    2010-01-28  1173    1924    751
4   4   39  1   sewing  2010-01-28  1008    1250    751
5   5   38  1   weaving 2010-01-28  1173    1924    751
6   6   78  1   costs   2010-01-28  727     939     212
7   7   23  1   lunch   2010-01-28  1553    1788    235
8   9   7   2   lunch   2010-01-29  1001    1230    371
9   10  4   2   weaving 2010-01-29  1547    1724    135
10  11  6   2   social  2010-01-29  1001    1290    350
11  12  7   2   silk    2010-01-29  1926    2276    350
12  14  17  2   supply  2010-01-29  1926    2276    350
13  15  78  2   costs   2010-01-29  1926    2276    350
14  17  78  2   weaving 2010-01-29  1890    2106    212

给出的文本代码=代码(主题)

文件名=文本的文件名(本例中为日记条目的日期)

index1 =字符在开始代码的文件中的位置(突出显示的文本)

index2 =字符在代码结束的文件中的位置(突出显示的文本)

CodingLength =编码/突出显示文本的总长度

我想要做的是遍历整个表(大约1,500行),使用代码的总列表(上表中的代码名,大约100个唯一的代码),以便输出代码之间重叠的双向矩阵,例如(仅指示性的,有5个代码):

代码语言:javascript
复制
    silk    cotton  sewing  weaving lunch breaks    socialising
silk    *     0      0       3       2              0
cotton  0     *      5       0       0              0
sewing  0     5      *       0       0              0
weaving 3     0      0       *       0              0
lunchs  2     0      0       0       *              5
socialg 0     0      0       0       5              *

(代码在这个输出上有点混乱,但希望您能理解)

因此,在R中,我需要一些代码来迭代代码列表,并计算A)文件名相同和B)在index1和index2之间的范围内重叠的实例数(CodingLength可能并不重要)。

除了以下几个模糊的预感之外,我对如何使这一工作感到迷惑不解:

  1. 我可能需要将表标记为变量,例如: coding_table <- getCodingTable()
  2. 我可能需要列出唯一变量的列表,例如: X=c(“丝绸”、“棉花”、“编织”、“缝纫”、“午餐”.(等等)
  3. 我需要一个做检查的函数
  4. 我需要行的for -循环。
  5. 我需要一个布尔测试,检查范围和文件名,例如任何(在%727:939中为409:939%) &&文件名==文件名

基于此,有没有人能找到一种很短的解决方案呢?我觉得python中的等价物最多是10行,但考虑到R中所需的额外位数,我完全不知道如何做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-07 19:50:03

您可以在foverlap包中使用data.table函数创建一个edgelist,然后将其转换为一个加权邻接矩阵。(见这里)。

使用data.tabledplyrigraph的组合,我认为这可以满足您的需要(但是,没有数据是无法验证的)。

首先,将数据帧设置为数据表,并设置index1和index2的键。然后,foverlap标识条目,其中index1和index2有任何重叠。消除自重叠后,将foverlaps生成的ids替换为来自数据集的相应代码名。这就创造了一个边缘学家。将此编辑传递给igraph,以创建igraph对象,并将其作为邻接矩阵返回。

代码语言:javascript
复制
require(igraph); require(data.table); require(dplyr)

el <- setkey(setDT(coding_table), filename, index1, index2) %>%
  foverlaps(., ., type="any", which=TRUE) %>%
  .[coding_table$codename[xid] != coding_table$codename[yid]] %>%
  .[, `:=`(xid = coding_table$codename[xid], yid = coding_table$codename[yid])]

m <- as.matrix(get.adjacency(graph.data.frame(el)))

当然,dplyr是完全可选的;管道使它更加整洁,避免在环境中创建更多的对象。

票数 2
EN

Stack Overflow用户

发布于 2016-11-08 14:57:30

另一种似乎有效的方法,我理解你的描述。

使用"IRanges“包查找重叠:

代码语言:javascript
复制
fo = findOverlaps(IRanges(dat$index1, dat$index2))

检查重叠区域是否属于相同的“文件名”:

代码语言:javascript
复制
i = dat$filename[queryHits(fo)] == dat$filename[subjectHits(fo)]

并且,为重叠的"index1“和"index2”列出“代码名”,它们属于同一个“文件名”:

代码语言:javascript
复制
table(dat$codename[queryHits(fo)[i]], dat$codename[subjectHits(fo)[i]])
#       
#          costs cotton lunch sewing silk social supply weaving
#  costs       2      0     0      0    2      0      1       1
#  cotton      0      1     0      1    0      0      0       0
#  lunch       0      0     2      0    1      1      0       1
#  sewing      0      1     0      1    1      0      0       1
#  silk        2      0     1      1    3      0      1       2
#  social      0      0     1      0    0      1      0       0
#  supply      1      0     0      0    1      0      1       1
#  weaving     1      0     1      1    2      0      1       3
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40470933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档