R中的条件不同行

Conditional distinct rows in R

我有一个数据框,我想在其中保留所有不同的字符串条目(即删除重复项)在一列中除非这些条目很短,str_length < 7. 我还想保留所有其他列。

所以我有

string other columns
"abc"
"abc"
"centauri"
"centauri"
"armageddon"
"armageddon"
"spaghetti"

期望的输出:

string other columns
"abc"
"abc"
"centauri"
"armageddon"
"spaghetti"

我尝试了多种 dplyr 方法,但没有任何效果。

df <- df %>%
  mutate(len = str_length(string))%>%
  group_by(string, len) %>%
  filter(len >7) %>%
  distinct(.keep_all = TRUE) 

在这个例子中,我没有取回我过滤掉的行。但我只想保护过滤后的行不受不同函数的影响,然后将它们放回数据框中。

我们可以使用 duplicatednchar

df1[!(duplicated(df1$string) & nchar(df1$string) > 7), , drop = FALSE]

-输出

#     string
#1        abc
#2        abc
#3   centauri
#5 armageddon
#7  spaghetti

filterdplyr

library(dplyr)
df1 %>%
   filter(!(duplicated(string) & nchar(string) > 7))

数据

df1 <- structure(list(string = c("abc", "abc", "centauri", "centauri", 
"armageddon", "armageddon", "spaghetti")), class = "data.frame", 
row.names = c(NA, 
-7L))