r - 删除所有包含 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
这可能吗?
解决方案
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
))
推荐阅读
- html - Google Apps 脚本 - 从 HTML 创建 PDF 时不显示图像
- java - 如何在 Java 中评估带有逻辑运算符的表达式?
- reactjs - 将函数的结果传递到链上,以便父级更改
- php - 如何以类型安全的方式在 PHP 中处理用户输入
- php - 从文本中的不同格式中提取纬度和经度
- javascript - 为什么我的异步函数总是返回一个未决的承诺?
- slack - Slack API:如何向频道中的每个成员发送预定的私人消息?
- garbage-collection - 此后不久,内存再次达到峰值 Erlang gc (fullsweep)?
- javascript - 通过 Object.defineProperty 调用自定义设置器后,对象似乎消失了
- c - 无法在c中以读取模式打开文件