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

将一个数据帧中的NA单元位置复制到另一个数据帧中

韦安怡
2023-03-14

我有两个实体:矩阵和数据帧。矩阵在所有单元格中都有数字。第二个数据帧在几个单元格中有NA。如何确保第一个矩阵的NA与后一个数据帧中的NA处于相同的精确位置。

我试着完成。case()和na。省略,但不幸的是,这将一起删除行。我尝试了一个for循环,它先按列迭代,然后按行迭代,检查单元格的位置是否为零,并返回位置,然后将该位置反馈到indp数据帧中-得到一些关于维度的错误:

贯穿我的逻辑。这将一次迭代一列,然后迭代行;其中单元格包含0,然后在indp矩阵中获取相同的单元格位置并设置为0-但似乎没有发生任何事情。

numZero <- 0 
cols <- 0    
for (i in 1:ncol(ws)){
  for (k in 1:nrow(ws)){
    if (is.na(ws[k,i])){
      print(indp[i,k])
      indp[i,k] <- 0  
      numZero <- numZero + 1
    }

  }
  cols <- cols +1
}

应该注意的是,indp是一个矩阵。

添加了cols和numzero以保留一个关于行数和cols的选项卡,因为我一直得到以下错误:indp[I,k]中的错误:下标超出边界。indp和ws具有相同的尺寸。但是,col和numzero计数器返回与维度不同的col和行。indp矩阵也没有发生任何变化。我错过什么了吗?

还附上了两者的图片来帮助概念化: indp

请注意0的:ws

希望执行以下操作:原始矩阵:

    [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25

数据帧:

  V1 V2 V3 V4 V5
1  1  5  1  0 NA
2  3  3  1  2  2
3  0  1  5  4 NA
4  5 NA  3  2  0
5 NA  0  3  4  1

我希望第一个矩阵符合上述要求-NAs完全位于同一单元格中:

[,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   NA
[2,]    2    7   12   17   22
[3,]    3    8   13   18   NA
[4,]    4   NA   14   19   24
[5,]   NA   10   15   20   25

除此之外,

m1 <- matrix(1:25, 5, 5);set.seed(25); 
dat1 <- as.data.frame(matrix(sample(c(NA,0:5), 5*5, replace=TRUE), ncol=5))
numZero <- 0 
cols <- 0    
for (i in 1:ncol(dat1)){
  for (k in 1:nrow(dat1)){
    if (is.na(dat1[k,i])){
      print(dat1[i,k])
      m1[i,k] <- 0  
      numZero <- numZero + 1
    }
    else{
      print(dat1[i,k])
    }

  }
  cols <- cols +1
}

在每次迭代时打印单元格条目,以与原始数据实体进行比较,但我得到的数据与其中的数据不同,这很奇怪,因为我认为m1[1,1],例如,应该返回单元格条目。

共有1个答案

陶博涉
2023-03-14

我们可以用is得到一个逻辑矩阵。na(dat1),从逻辑矩阵中提取与真值对应的“m1”中的元素,并将其分配给na

m1[is.na(dat1)] <- NA
m1
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    6   11   16   NA
#[2,]    2    7   12   17   22
#[3,]    3    8   13   18   NA
#[4,]    4   NA   14   19   24
#[5,]   NA   10   15   20   25
 类似资料:
  • 我有两个数据帧df1和df2 df1如下 df2就像 我想根据df2中与df1中的列名匹配的单元格值将值从df1复制到df2,所以我的df3应该看起来像 df3 基本上,我想根据df2的单元格值(df1中的列名)从df1复制df2中的列 如果它仍然令人困惑,请告诉我

  • 这是我的密码: 我想知道如何将df3绑定到单个数据帧中作为"NA"s? 我在r_blogger上找到了一篇关于将向量或长度不等的数据帧组合成一个数据帧的文章。http://www.r-bloggers.com/r-combining-vectors-or-data-frames-of-unequal-length-into-one-data-frame/ 但是我从数据中得到的数据框,其中一些是空的

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

  • 我有两个数据框,都包含英文和中文单词字符串,我想知道其中一个是另一个的子集:

  • 我有两个数据帧,它们的列名相同,但行数不同。第一个数据帧(a)看起来与此类似: 注:站点5、6、8和12故意丢失。 第二个数据帧(b)看起来像这样: 我想要实现的是: 在那里我注入(我肯定有一个更好的术语)数据帧b到数据帧a的数据,但是我想用零替换b中的任何NAs,并保持a中的NAs不变。 我发现并尝试了这个代码: 但它会带来NAs。我考虑先将NAs替换为零,但即使如此,它也会抹去我目前在数据帧a

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