我有一个数据框如下

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/

10-12 17:13
查看更多