首页 > 解决方案 > R中的条件不同行

问题描述

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

所以我有

细绳 其他栏目
“ABC”
“ABC”
“半人马”
“半人马”
“世界末日”
“世界末日”
“意大利面”

期望的输出:

细绳 其他栏目
“ABC”
“ABC”
“半人马”
“世界末日”
“意大利面”

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

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

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

标签: rconditional-statementsdistinct

解决方案


我们可以duplicated使用nchar

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))

推荐阅读