R 如何在数据框中选择至少有一个变量具有非缺失值的行?

R 如何在数据框中选择至少有一个变量具有非缺失值的行?,r,R,在数据帧中,我只希望至少有一个以DSDECOD开头的变量的行不为空。我该怎么做 下面的代码似乎可以工作 ds_sub <- subset(ds_supp, (DSDECOD1 !="" | DSDECOD2 !="" | DSDECOD3 !="" | DSDECOD4 !="")) 但是有没有一种简单的方法可以让我不必从DSDECOD开始写出所有的变量呢 可能使用行和和和grepl: 数据: 您可以尝试使用select和remove_empty函数从看门人软件包中删除吗 此正则

在数据帧中,我只希望至少有一个以DSDECOD开头的变量的行不为空。我该怎么做

下面的代码似乎可以工作

ds_sub <- subset(ds_supp, (DSDECOD1 !="" | DSDECOD2 !="" |
    DSDECOD3 !="" | DSDECOD4 !=""))
但是有没有一种简单的方法可以让我不必从DSDECOD开始写出所有的变量呢

可能使用行和和和grepl:

数据:

您可以尝试使用select和remove_empty函数从看门人软件包中删除吗


此正则表达式解决方案的工作原理是:

df[-which(grepl("\\d$", apply(df, 1, paste0, collapse = ""))),]

   id DSDECOD1 DSDECOD2 DSDECOD3
1   1                 A         
2   2        B                  
3   3                          A
4   4                 B         
8   8                          A
9   9                          B
10 10                          A
此解决方案通过将行粘贴在一起,然后从数据帧中减去数字\\d上以$结尾的字符串,这仅在DSDECOD行为空时发生:

可复制数据:


这可能会有帮助:在rowSums函数中添加'na.rm=TRUE'对我很有用。
  ID DSDECOD1 DSDECOD2 DSDECOD3 DSDECOD4
1  1                          B         
2  2        A                 A        A
3  3        B                          B
4  4                                     # <- empty row
5  5        C                 C        C
6  6                          D        D
ds_sub %>%
select(contains("DSDECOD")) %>%
janitor::remove_empty(.)
df[-which(grepl("\\d$", apply(df, 1, paste0, collapse = ""))),]

   id DSDECOD1 DSDECOD2 DSDECOD3
1   1                 A         
2   2        B                  
3   3                          A
4   4                 B         
8   8                          A
9   9                          B
10 10                          A
df <- data.frame(
  id = 1:10,
  DSDECOD1 = c("", "B", rep("",8)),
  DSDECOD2 = c("A","","","B","","","","","",""),
  DSDECOD3 = c("", "", "A", "","","","", "A", "B", "A"))

df
   id DSDECOD1 DSDECOD2 DSDECOD3
1   1                 A         
2   2        B                  
3   3                          A
4   4                 B         
5   5                             # empty 
6   6                             # empty 
7   7                             # empty
8   8                          A
9   9                          B
10 10                          A