gpt4 book ai didi

重新排列矩阵 : collapsing columns to remove NAs

转载 作者:行者123 更新时间:2023-12-05 00:57:12 25 4
gpt4 key购买 nike

经过仔细搜索,我仍然无法解决我的问题,就在这里。
我有一个矩阵有很多 NA就像这个:

matrix(c(NA,NA,1,NA,NA,-3,  -1,NA,NA,NA,NA,NA,  NA,2,NA,NA,NA,NA,  NA,3,NA,NA,-2,5,  NA,NA,NA,NA,NA,NA,  NA,NA,NA,6,-7,NA),ncol=6,nrow = 6)

这产生以下
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] NA -1 NA NA NA NA
[2,] NA NA 2 3 NA NA
[3,] 1 NA NA NA NA NA
[4,] NA NA NA NA NA 6
[5,] NA NA NA -2 NA -7
[6,] -3 NA NA 5 NA NA

我的目标是折叠矩阵以具有:1)通过向上移动所有值以摆脱 NA 产生的行数s; 2) 列数相同。在这种情况下,结果矩阵将为 3X6,因为在任何情况下,每列的值都不会超过 3 个。
这是我试图获得的矩阵:
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 -1 2 3 NA 6
[2,] -3 -1 2 -2 NA -7
[3,] 1 -1 2 5 NA 6

1)具有单个值的列重复它; 2)具有两个值的列在第二次出现时具有第二个值,而当它们出现第三个时,它们再次采用第一个值(并最终为其他行保留它); 3) 带有三个值的列每次都会改变它。列与所有 NA s 可以保持不变。

一个完整的解决方案会很棒,但我很高兴获得有关进行这种复杂重组的方式的提示。

最佳答案

假设 m是输入矩阵,找到任何列中非 NA 的最大数量,然后应用 rep_len到每列中的非 NAs 到该长度:

mx <- max(colSums(!is.na(m)))
apply(m, 2, function(x) rep_len(na.omit(x), mx))

给予:
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 -1 2 3 NA 6
[2,] -3 -1 2 -2 NA -7
[3,] 1 -1 2 5 NA 6

关于重新排列矩阵 : collapsing columns to remove NAs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843199/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com