当前位置: 首页 > 知识库问答 >
问题:

使用来自另一个数据帧的值查找矩阵中的单元格值

卞嘉许
2023-03-14

我有一个矩阵,所有单元格的值都是-1:1,还有一个数据框,它为我需要查找的每个单元格标识行/列单元格。

我想在包含矩阵中标识的单元格中的值的数据帧中添加列。我所拥有的和我想要的例子如下:

有矩阵:

      1   2   3   4   5   6   7   8   9  10

 1    0   0   0   1   0   1   1   0   0   0
 2    0   0  -1  -1   1   1  -1  -1   0   0
 3    0   0  -1   0   0  -1   0  -1   0   0
 4   -1   1   0   0   1   1   0  -1   1  -1
 5   -1   1   0  -1  -1   0   0   0   0   1
 6    1  -1   1   1   0   0  -1  -1   0   1
 7    0  -1   1   0   1   1   0   1  -1   0
 8    0   0  -1  -1  -1   0   1  -1   0   1
 9   -1   1   0   1   1  -1   0   1  -1  -1
10   -1   1  -1  -1  -1  -1   1   0   1  -1

数据库:

     i   j   k

 1   3   4   2
 2   4   8  10
 3  10   7   5
 4   2   6   8
 5   9  10   7
 6   2  10   4
 7   7   8  10
 8   6  10   8
 9   2   9   5
10   9   7   1

需要数据帧:

     i    j    k    j,i    k,i    k,j

 1   3    4    2      0     -1     -1
 2   4    8   10     -1     -1      0 
 3  10    7    5      0      1      0
 4   2    6    8     -1      0      0
 5   9   10    7      1     -1      0   
 6   2   10    4      1      1     -1
 7   7    8   10      1      1      0
 8   6   10    8     -1      0      1
 9   2    9    5      1      1      0
10   9    7    1     -1      0      1

共有1个答案

严柏
2023-03-14

一种选择是使用comnsApplication(如果组合需要以特定的顺序,循环通过list,提取第二个数据集的列,将其用作提取的行/列索引来自第一个数据集和cbind的相应元素

indList <- list(ji = c('j', 'i'), ki = c('k', 'i'), kj = c('k', 'j'))
cbind(df2, sapply(indList, function(x) m1[as.matrix(df2[x])]))
#    i  j  k ji ki kj
#1   3  4  2  0 -1 -1
#2   4  8 10 -1 -1  0
#3  10  7  5  0  1  0
#4   2  6  8 -1  0  0
#5   9 10  7  1 -1  0
#6   2 10  4  1  1 -1
#7   7  8 10  1  1  0
#8   6 10  8 -1  0  1
#9   2  9  5  1  1  0
#10  9  7  1 -1  0  1

也可以使用combn

cbind(df2, combn(df2, 2, FUN = function(x) m1[as.matrix(x[2:1])]))
df2 <- structure(list(i = c(3L, 4L, 10L, 2L, 9L, 2L, 7L, 6L, 2L, 9L), 
    j = c(4L, 8L, 7L, 6L, 10L, 10L, 8L, 10L, 9L, 7L), k = c(2L, 
    10L, 5L, 8L, 7L, 4L, 10L, 8L, 5L, 1L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"))

m1 <- structure(c(0L, 0L, 0L, -1L, -1L, 1L, 0L, 0L, -1L, -1L, 0L, 0L, 
0L, 1L, 1L, -1L, -1L, 0L, 1L, 1L, 0L, -1L, -1L, 0L, 0L, 1L, 1L, 
-1L, 0L, -1L, 1L, -1L, 0L, 0L, -1L, 1L, 0L, -1L, 1L, -1L, 0L, 
1L, 0L, 1L, -1L, 0L, 1L, -1L, 1L, -1L, 1L, 1L, -1L, 1L, 0L, 0L, 
1L, 0L, -1L, -1L, 1L, -1L, 0L, 0L, 0L, -1L, 0L, 1L, 0L, 1L, 0L, 
-1L, -1L, -1L, 0L, -1L, 1L, -1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 
0L, -1L, 0L, -1L, 1L, 0L, 0L, 0L, -1L, 1L, 1L, 0L, 1L, -1L, -1L
), .Dim = c(10L, 10L), .Dimnames = list(c("1", "2", "3", "4", 
"5", "6", "7", "8", "9", "10"), c("1", "2", "3", "4", "5", "6", 
"7", "8", "9", "10")))
 类似资料:
  • 我有2列的。我想控制第1列的外观,所以我使用下面的代码根据单元格行是偶数还是奇数来设置单元格中的文本字体是否为粗体。 我称之为: 我想要的是修改这个< code>TableCellRenderer,以便单元格背景将基于同一行上的另一列(列0)值来绘制。例如,如果第0列第5行的值是“book ”,则第1列第5行的单元格将为红色,如果第0列的值是“newspaper ”,则第1列的颜色为绿色。我的问题

  • 我相信这很简单,但找不到答案。我有一个数据帧df: 然后,我有另一个较小的数据框,其中包含单元格引用(行号和列号),引用df中应为空的特定单元格(即NA): 我如何用NA替换df中所有由cellRefs中的行和列引用引用的单元格?

  • 我和Spark一起在Databricks上工作。编程语言是Scala。 我有两个数据帧: 主数据框:见截图:1 查找数据帧:参见屏幕截图3 我想: 查找主数据框中“年龄”=-1的所有行 我对如何做这件事伤了脑筋。我唯一想到的是将dataframe存储为DataRicks中的表,并使用SQL语句(SQL.Context.SQL…),结果非常复杂。 我想知道是否有更有效的方法。 编辑:添加可复制的示例

  • 问题内容: 我有一个熊猫数据框,看起来像这样: 一千行左右,六列。大多数单元格为空(NaN)。考虑到不同的列中包含文本,我想知道每列中文本的概率是多少。例如,这里的小片段将产生如下内容: 也就是说,Al01栏中有4个匹配项;在这4个匹配中,BBR60列中没有匹配,CA07列中也没有匹配,NL219列中有3个匹配。等等。 我可以遍历每一列并使用值构建字典,但这似乎很笨拙。有没有更简单的方法? 问题答

  • 我有两个数据帧df1和df2。df1就像一个具有以下值的字典 df2具有以下值: 我想基于df1数据帧中的,将df2拆分为3个新的数据帧。 日期,TLRA_权益栏应位于数据框 预期产出: > 数据帧 消费者,非周期性数据帧 请让我知道如何有效地做。我想做的是连接列名,例如,然后根据列名的前半部分分割数据帧。 代码: 但这很复杂。需要更好的解决方案。

  • 如果数据帧列中的单元格值匹配,我试图用"1"s填充相邻矩阵。“1”的位置基于同一行中的相应值。 更准确地说:数据帧pat1 我想填充矩阵单元格,,,和在空矩阵与相应的行/cole. name与"1"起,和,分别。 所需的输出将是带有列名的矩阵(数据=c(0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0),nrow=4,byrow=T) 我找过了,但还没有找到方法。