我有两个实体:矩阵和数据帧。 Matrix在所有单元格中都有数字。第二个数据帧在几个单元格中具有NA。如何确保第一个矩阵的NA与后一个数据帧中的NA位置相同。
我尝试了complete.case()和na.omit,但遗憾的是这一切都删除了所有行。我尝试了一个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以保留行数和列数的选项卡,因为我不断收到以下错误: indp [i,k]:下标超出界限时出错。 indp和ws具有相同的尺寸。但是,col和numzero计数器返回与维度不同的cols和rows。 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],例如应该返回单元格条目。
答案 0 :(得分:0)
我们可以使用is.na(dat1)
获取逻辑矩阵,提取&#39; m1&#39;对应于逻辑矩阵的TRUE值并将其分配给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