r - R中按条件选择性合并行
问题描述
我有一个如下所示的 data.frame:
ID | 时间 | 价值 |
---|---|---|
一个 | T1 | 向上 |
一个 | T2 | 下 |
一个 | T3 | 不 |
乙 | T1 | 向上 |
乙 | T2 | 下 |
乙 | T3 | 不 |
乙 | T1 | 不 |
乙 | T2 | 不 |
乙 | T3 | 向上 |
C | T1 | 向上 |
C | T2 | 不 |
C | T3 | 不 |
C | T1 | 不 |
C | T2 | 不 |
C | T3 | 下 |
我想像这样合并它
ID | 时间 | 价值 |
---|---|---|
一个 | T1 | 向上 |
一个 | T2 | 下 |
一个 | T3 | 不 |
乙 | T1 | 向上 |
乙 | T2 | 下 |
乙 | T3 | 向上 |
C | T1 | 向上 |
C | T2 | 不 |
C | T3 | 下 |
说明:如果A(ID)和B(时间)列相同,则合并C(值)列;但是,C(值)列是类别类型(只有三种:向上、向下和无)。合并时,始终保持 up 或 down,但如果合并的行同时包含两者(up 和 no,或 down 和 no),则不是 no。如果合并的行只包含 no,则保留 no。
我在文件中有超过 5000 行,因此只想在特定时间保留具有特定值的唯一 ID(向上或向下,或者两者都没有)。
解决方案
这是否有效:
library(dplyr)
df %>% group_by(ID, Time) %>% filter(all(value == 'no') | value !='no') %>% distinct()
# A tibble: 9 x 3
# Groups: ID, Time [9]
ID Time value
<chr> <chr> <chr>
1 A T1 up
2 A T2 down
3 A T3 no
4 B T1 up
5 B T2 down
6 B T3 up
7 C T1 up
8 C T2 no
9 C T3 down
推荐阅读
- python - 我的 python GCD 和 LCM 检查器有什么问题?
- java - 如何 mavenize Eclipse RCP 应用程序?
- r - 为什么来自控制台的 R 和 RStudio 之间的功能()不一样?
- android - 如何在没有额外 CMake 库的情况下将预制库中的预构建库嵌入到 APK 中?
- python - 理解字典计数器和重构python代码
- jupyter-notebook - 不可读的 Jupyter 笔记本 - 无效的起始字节
- parallel-foreach - Parallel ForEach 在最后一个元素处冻结
- mysql - 无法删除 Laravel eloquent 的集合
- javascript - 如何找出对象中的键是否具有值数组javascript
- python - 如何在代码中使 Python 包更新以即时生效