【发布时间】:2021-12-30 03:54:28
【问题描述】:
我知道这里已经有很多答案可以将非 NA 值按行向左移动。但所有这些都将让我永远做到这一点。有没有最快的方法来执行这个任务?示例:
#from
X1 X2 X3 X4 X5 X6 X7
NA NA AB NA AD AE AF
NA NA NA AG NA AI AJ
NA AK AL AM NA AO AP
NA NA AQ NA AS AT NA
AV AW AX AY AZ NA BB
#to
X1 X2 X3 X4 X5 X6 X7
AB AD AE AF NA NA NA
AG AI AJ NA NA NA NA
AK AL AM AO AP NA NA
AQ AS AT AU NA NA NA
AV AW AX AY AZ BB NA
使用apply 和/或for 循环需要很长时间。就上下文而言,我有一个包含 340K 行和 67 列的数据框,如果我运行以下命令,我将需要 18 多个小时才能完成这项工作:
for (i in 1:nrow(df)) {
Temp <- unlist(df[i,])
ndf[i,] <- t(c(Temp[!is.na(Temp)],Temp[is.na(Temp)]))
}
其他帖子中的其他建议解决方案似乎与此类似,所以我也预计需要很长时间。
我也试过以下代码:
ndf <- na_move(df) #from package: dedupewider
但它似乎没有完成最后 3 列的工作,如下所示:
#to
X1 X2 X3 X4 X5 X6 X7
AB NA NA NA AD AE AF
AG NA NA NA NA AI AJ
AK AL AM NA NA AO AP
AQ NA NA NA AS AT NA
AV AW AX AY AZ NA BB
希望有一个解决方案。非常感谢!
【问题讨论】:
-
您能否提供一个小矩阵以及您期望该矩阵的运算输出是什么?
-
嗨,米凯尔,在这里。但我也不需要对非 NA 值进行排序。谢谢! stackoverflow.com/questions/26651606/…
-
你的矩阵也是字符矩阵吗?还是数字?
-
这是一个字符矩阵。
-
您没有提供示例,而是链接到另一个有 5 个答案的问题?并且该问题被标记为与另一个有 7 个答案的问题重复?这是不屑一顾的。你测试了所有 12 个可用的答案吗? 340k 行和 67 列并不是 那么 大...我希望它可以在几分钟内运行,而不是 18 小时。如果您想针对您的类别和大小的数据优化代码,我强烈建议您共享代码以模拟适当复杂的示例数据,以使基准测试有意义。否则我认为这个问题将作为重复而被关闭。