r - 如何删除零值,直到第一个非零值出现在 R 数据帧中?
问题描述
标题说明了一切!我已经对数据进行了分组,我想按value
组删除行,直到第一个 0 为止id
。
示例代码:
problem <- data.frame(
id = c(1,1,1,1,2,2,2,2,3,3,3,3),
value = c(0,0,2,0,0,8,4,2,1,7,6,5)
)
solution <- data.frame(
id = c(1,1,2,2,2,3,3,3,3),
value = c(2,0,8,4,2,1,7,6,5)
)
解决方案
这是一个dplyr
解决方案:
library(dplyr)
problem %>%
group_by(id) %>%
mutate(first_match = min(row_number()[value != 0])) %>%
filter(row_number() >= first_match) %>%
select(-first_match) %>%
ungroup()
# A tibble: 9 x 2
id value
<dbl> <dbl>
1 1 2
2 1 0
3 2 8
4 2 4
5 2 2
6 3 1
7 3 7
8 3 6
9 3 5
或者更简洁地根据 Tjebo 的评论:
problem %>%
group_by(id) %>%
filter(row_number() >= min(row_number()[value != 0])) %>%
ungroup()
推荐阅读
- f# - 我怎样才能让`printfn“%A”`打印完整的复杂结构?
- javascript - d3:如何在水平方向移动垂直线并支持“暂停”和“继续”移动
- java - 我收到空值错误,因为 java.lang.AssertionError: Lists different at element [0]: != Selenium expected [] but found [Selenium]
- javascript - jQuery('#myModal:visible').length === 0 在 Javascript
- java - 使用 if 语句依次执行这两个代码
- react-native - 如何使用 SeionList 展开和折叠指定部分?
- cassandra - Write consistency = ALL: do I still need weekly repairs to avoid zombie records?
- java - 如何使用需要在 Oracle 数据库中调用存储过程的实体管理器创建 Clob?
- java - 无法通过 JDBC java 程序连接 hive2
- python - Seaborn 散点图 - 标记数据点