我想知道是否可以從方陣中選擇NA列和NA行并將它們放入方陣中以實作我的方陣?d1d2DESIREDd3
這是一個玩具示例,d1方陣d2可以是任意維度。因此,實作類似NA替換的功能是值得贊賞的。
m1="
a1 a2 a3 a4 a5 a6 a7 a8 a9 b1 b2 b3
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.1 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
NA NA NA NA NA NA NA NA NA NA NA NA
0 0.0 0 0 0 0 NA 0.3 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.1 NA 0.0 NA
NA NA NA NA NA NA NA NA NA NA NA NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.3 NA
NA NA NA NA NA NA NA NA NA NA NA NA"
d1 <- sapply(read.table(text=m1,h=T),as.numeric)
m2="
a1 a2 a3 a4 a5 a6 a8 a9 b2
1 2.0 1 9 4 0 0.0 3.0 1.0
0 0.1 0 0 0 0 0.0 0.0 0.0
0 0.0 7 0 0 0 0.0 0.0 0.0
0 0.0 0 5 0 0 0.0 0.0 0.0
0 0.0 0 0 0 0 0.0 0.0 0.0
0 0.0 0 0 0 0 0.0 0.0 0.0
0 0.0 0 0 3 0 0.3 0.0 0.0
0 0.0 0 0 0 0 0.0 0.1 0.0
0 0.0 8 0 6 0 0.0 0.0 0.6"
d2 <- as.matrix(read.table(text=m2,h=T))
DESIRED="
a1 a2 a3 a4 a5 a6 a7 a8 a9 b1 b2 b3
1 2.0 1 9 0 0 NA 0.0 3.0 NA 1.0 NA
0 0.1 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 7 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 5 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
NA NA NA NA NA NA NA NA NA NA NA NA
0 0.0 0 0 3 0 NA 0.3 0.0 NA 0.0 NA
0 0.0 0 0 0 0 NA 0.0 0.1 NA 0.0 NA
NA NA NA NA NA NA NA NA NA NA NA NA
0 0.0 8 0 6 0 NA 0.0 0.0 NA 0.6 NA
NA NA NA NA NA NA NA NA NA NA NA NA"
d3 <- as.matrix(read.table(text=DESIRED,h=T))
uj5u.com熱心網友回復:
由于d1具有正確的大小,復制d1到d3然后將 的元素復制d2到 的非 NA 元素中d3:
d3 <- d1
d3[!is.na(d3)] <- d2
# or a one-liner
d4 <- replace(d1, !is.na(d1), d2)
identical(d3, d4)
#> [1] TRUE
d3
#> a1 a2 a3 a4 a5 a6 a7 a8 a9 b1 b2 b3
#> [1,] 1 2.0 1 9 4 0 NA 0.0 3.0 NA 1.0 NA
#> [2,] 0 0.1 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
#> [3,] 0 0.0 7 0 0 0 NA 0.0 0.0 NA 0.0 NA
#> [4,] 0 0.0 0 5 0 0 NA 0.0 0.0 NA 0.0 NA
#> [5,] 0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
#> [6,] 0 0.0 0 0 0 0 NA 0.0 0.0 NA 0.0 NA
#> [7,] NA NA NA NA NA NA NA NA NA NA NA NA
#> [8,] 0 0.0 0 0 3 0 NA 0.3 0.0 NA 0.0 NA
#> [9,] 0 0.0 0 0 0 0 NA 0.0 0.1 NA 0.0 NA
#> [10,] NA NA NA NA NA NA NA NA NA NA NA NA
#> [11,] 0 0.0 8 0 6 0 NA 0.0 0.0 NA 0.6 NA
#> [12,] NA NA NA NA NA NA NA NA NA NA NA NA
注意:您發布的“所需”矩陣的第一個元素似乎應該是1而不是0.
uj5u.com熱心網友回復:
是的。使用邏輯子集,從矩陣 1 中找到 NA,并在矩陣 2 中找到子集。
> x <- matrix(0, nrow = 5, ncol = 5)
> y <- x
>
> x[1,2] <- NA
> x[2,3] <- NA
> x[3,5] <- NA
>
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 0 NA 0 0 0
[2,] 0 0 NA 0 0
[3,] 0 0 0 0 NA
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 0 0 0 0 0
[2,] 0 0 0 0 0
[3,] 0 0 0 0 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
>
> y[is.na(x)] <- NA
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 0 NA 0 0 0
[2,] 0 0 NA 0 0
[3,] 0 0 0 0 NA
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/412391.html
標籤:
下一篇:SML函式創建一個從1到n的串列
