我有一个序列变量列表,我想知道在变量序列中是否有一个简单的dplyr子集化方法。
例如,我有以下变量:
DX1 DX2 DX3 DX4 DX5
如果这些变量中的任何一个包含以下字符串' 7586'我想要我的数据子集。
从单个变量中进行子集我将执行以下操作:
filter(df, DX1 == '7586')
我能想到的唯一方法是:
filter(df, DX1 == '7586' | DX2 == '7586' | DX3 == '7586' | DX4 == '7586' | DX5 == '7586')
我的实际数据集包含DX1-DX25,编写起来非常繁琐。
有没有简化上述方法的方法?
的内容
filter(df, DX1-25 == '7586')
谢谢
答案 0 :(得分:5)
两个选项,一个在基础R中,一个在dplyr
中,应该产生相同的结果:
df[rowSums(df == 7586) > 0,]
或
library(dplyr)
df %>%
filter(rowSums(. == 7586) > 0)
和data.table
版本的乐趣,如果有必要,它应该更快一点:
library(data.table)
setDT(df)[, .SD[Reduce(`+`, lapply(.SD, `==`, 7586) ) > 0] ]
答案 1 :(得分:1)
如果DX1~DX25是data.frame的全部或大部分列,可能就像这样?
df[apply(df, 1, function(row) any(row == '7586')), ]
x y
1 7586 322
2 3322 7586
数据强>:
structure(list(x = structure(c(2L, 1L), .Label = c("3322", "7586"
), class = "factor"), y = structure(1:2, .Label = c("322", "7586"
), class = "factor")), .Names = c("x", "y"), row.names = c(NA,
-2L), class = "data.frame")
答案 2 :(得分:1)
select(data, DX1:DX25) %>% apply(., 1, function(x) any(x == '7586')) %>% data[. , ]