我有这个df
df <- data.frame(
id = c(1L,1L,1L,2L,2L,3L),
keyword = c("car","hospital",NA,"cat",NA,NA))
我想要这个
df <- data.frame(
id = c(1L,1L,2L,3L),
keyword = c("car","hospital","cat",NA))
如果有关键字,我想保留它,如果没有,保留NA
试试
df %>% group_by(id) %>% filter(!is.na(keyword) | keyword != " ")
您可以有条件地filter
。
如果在一个组中,所有NA
值都存在,则返回第一行,否则返回非na行。
library(dplyr)
df %>%
group_by(id) %>%
filter(if(all(is.na(keyword))) row_number() == 1 else !is.na(keyword)) %>%
ungroup
# id keyword
# <int> <chr>
#1 1 car
#2 1 hospital
#3 2 cat
#4 3 NA
可能的解决方案:首先我们删除keyword
中所有具有NA的行,然后我们为可能缺失的id
s添加新行(其中所有其他列现在将包含NA):
library(dplyr)
library(tidyr)
df %>%
filter(!is.na(keyword)) %>%
full_join(df %>% select(id) %>% unique())
的回报:
id keyword 1 1 car 2 1 hospital 3 2 cat 4 3 <NA>