我有一个数据框如下
Sol_name geo_pos loc_pos dol_pos pol_pos kol_pos
A 1 1 0 0 1
B 0 1 1 0 0
C 1 0 1 1 1
D 0 1 0 0 1
我需要创建一个函数,用户可以在其中将列名输入到向量中,并且数据框将被过滤,其中任何列中的值为 1
示例:如果输入是
col_nm = c("geo_pos","dol_pos")
那么我正在寻找的输出是Sol_name geo_pos loc_pos dol_pos pol_pos kol_pos
A 1 1 0 0 1
B 0 1 1 0 0
C 1 0 1 1 1
有什么有效的方法可以做到这一点吗?
数据
df <- read.table(text="Sol_name geo_pos loc_pos dol_pos pol_pos kol_pos
A 1 1 0 0 1
B 0 1 1 0 0
C 1 0 1 1 1
D 0 1 0 0 1",h=T)
最佳答案
我们可以在这里有效地使用 rowSums
来过滤所选列中至少有一个“1”的行。
get_one_rows <- function(cols) {
df[rowSums(df[cols] == 1) > 0, ]
}
col_nm = c("geo_pos","dol_pos")
get_one_rows(col_nm)
# Sol_name geo_pos loc_pos dol_pos pol_pos kol_pos
#1 A 1 1 0 0 1
#2 B 0 1 1 0 0
#3 C 1 0 1 1 1
col_nm = c("kol_pos")
get_one_rows(col_nm)
# Sol_name geo_pos loc_pos dol_pos pol_pos kol_pos
#1 A 1 1 0 0 1
#3 C 1 0 1 1 1
#4 D 0 1 0 0 1
关于r - 根据包含列名的输入向量过滤数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52111343/