r - 如何提取具有正值和负值的相同行
问题描述
我正在尝试获取在一列中具有某些值但在另一列中具有正值和负值的行。输入是下面的数据框
data <- data.frame(X = c(1,3,5,7,7,8,9,10,10,11,11,12,12),
Y = sample(36476545:36476557),
timepoint = c(0,1,0,-0.31,1,1,1,1,-1,1,1,1,1)
)
输出看起来像这样
X Y timepoint
4 7 36476557 -0.31
5 7 36476545 1.00
8 10 36476556 1.00
9 10 36476548 -1.00
我在看这个链接,但不是我要找的。
解决方案
按“X”分组后,filter
通过取“时间点”的“时间点”,具有负和正“时间sign
点”,得到不同元素的数量(n_distinct
)为2(假设没有零)
library(dplyr)
data %>%
group_by(X) %>%
filter(n_distinct(sign(timepoint)) == 2)
# A tibble: 4 x 3
# Groups: X [2]
# X Y timepoint
# <dbl> <int> <dbl>
#1 7 36476547 -0.31
#2 7 36476556 1
#3 10 36476549 1
#4 10 36476557 -1
注意:“Y”值不同,因为示例创建时没有set.seed
如果也有零
data %>%
group_by(X) %>%
filter(all(c(-1, -1) %in% sign(timepoint)))
或base R
与ave
data[with(data, ave(sign(timepoint), X, FUN = function(x) length(unique(x))) == 2),]
或另一种base R
选择table
subset(data, X %in% names(which(rowSums(with(subset(data,
timepoint != 0), table(X, sign(timepoint))) > 0) == 2)))
推荐阅读
- permissions - 没有权限使用 psql 的 root
- javascript - 防止对可缓存响应的重复 HTTP 请求
- docker - docker-compose & Dockerfile:添加失败:未指定源文件
- php - PHP:检查反射类是否有构造函数?
- flutter - 将逗号分隔值添加到类列表
- arrays - 根据条件将幻灯片编号添加到数组中
- android - 我在 android studio 中找不到应用程序模块
- json - 在 PostgreSQL 12 中提取 JsonB 字典的元素
- python - 如何在 SageMath 中对一组两个微分方程进行数值积分?
- java - 在 SQLite 数据库中插入或读取值不会产生任何结果