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