r - 使用 dplyr 根据多列中的行值选择列

标签 r dplyr

我试图选择至少一行等于 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'))

最佳答案

一个解决方案,不使用 dplyr:

df[sapply(df[df$b == "B",], function(x) 1 %in% x)]

关于r - 使用 dplyr 根据多列中的行值选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47669537/

相关文章:

r - 将基于多列条件的 df 值输入到新变量中

mysql - R:Windows 上的 MySQL 字符编码

r - data.table:根据指标列的值和名称创建新的字符列

r - 使用 Fivethirtyeight ggtheme 将 ylab 添加到 ggplot

r - 如何提取列表中所有唯一因子级别的排列

r - 尽管使用了 scale_fill_manual(),ggplotly() 仍会忽略图例标签编辑

r - 更改 rmarkdown pdf 中的纸张尺寸和方向

r - "except"函数的 R 等效项是什么?

r - 计算每 n 行相对于每组条件的斜率

r - 如何根据列中的两个值过滤行?