首页 > 解决方案 > 删除所有包含 0 的单元格并将值向左移动

问题描述

我有一个包含一堆零和其他值的数据集,我需要删除所有为零的单元格并将剩余的值移到左侧。

 Item  35  45  55 65 75 85 95 100
 1     35   0   0  0  0 85  0   0
 2      0   0  55 65  0  0  0   0
 3      0   0   0  0 75 85  0   0
 4      0  45   0  0  0  0  0 100
 5      0   0   0  0  0 85 95   0

我需要一个输出

 Item  35  45  55 65 75 85 95 100
 1     35  85  
 2     55  65 
 3     75  85  
 4     45  100
 5     85  95 

这可能吗?

标签: r

解决方案


apply我们可以使用, 指定循环遍历行,然后根据行中 0 的数量连接不为 0 并在末尾填充MARGIN = 1的元素NA

df[-1] <- t(apply(df[-1], 1, function(x) c(x[x!= 0], rep(NA, sum(x == 0)))))

数据

df <- structure(list(Item = 1:5, `35` = c(35L, 0L, 0L, 0L, 0L), `45` = c(0L, 
0L, 0L, 45L, 0L), `55` = c(0L, 55L, 0L, 0L, 0L), `65` = c(0L, 
65L, 0L, 0L, 0L), `75` = c(0L, 0L, 75L, 0L, 0L), `85` = c(85L, 
 0L, 85L, 0L, 85L), `95` = c(0L, 0L, 0L, 0L, 95L), `100` = c(0L, 
0L, 0L, 100L, 0L)), class = "data.frame", row.names = c(NA, -5L
 ))

推荐阅读