【发布时间】:2017-12-06 08:05:51
【问题描述】:
我正在尝试选择至少一行等于 1 的列,前提是同一行在第二列中也具有特定值。我更愿意使用 dplyr 来实现这一点,但欢迎任何计算效率高的解决方案。
例子:
在 a1、a2、a3 中选择至少包含一行值为 1 且列 b=="B" 的列
示例数据:
rand <- function(S) {set.seed(S); sample(x = c(0,1),size = 3, replace=T)}
df <- data.frame(a1=rand(1),a2=rand(2),a3=rand(3),b=c("A","B","A"))
输入数据:
a1 a2 a3 b
1 0 0 0 A
2 0 1 1 B
3 1 1 0 A
期望的输出:
a2 a3
1 0 0
2 1 1
3 1 0
我设法使用以下代码获得了正确的输出,但这是一个非常低效的解决方案,我需要在一个非常大的数据帧(365,000 行 X 314 列)上运行它。
df %>% select_if(function(x) any(paste0(x,.$b) == '1B'))
【问题讨论】:
-
您最好将数据转换为长格式。您觉得这很困难的原因是您尝试以宽格式计算它。
-
@docendodiscimus 感谢您的提示,这似乎确实更容易!