过滤列中的值并删除不符合条件的行

列克·弗里

我在R中相对较新。我有这个问题。我有狗的数据数据的有用部分的例子(使用age_month和rasnaam(品种)列)

如果它们是小型,中型,大型等,我必须查找所有品种。如果它们是小型品种,则必须删除age_month小于9的所有行,如果它们是age_month的中型品种行小于13的必须删除(大,age_month <24)。我已经尝试了一些方法,但是没有用。我已将所有狗添加到列表中(也使用矢量进行了尝试),如下所示:(仅适用于此处的小狗)

small_dogs <- list("Affenpinscher", "Bichon frisé", "Bolognezer", "Chihuahua, langhaar",
            "Dandie Dinmont Terrier", "Dwergkeeshond", "Japanse Spaniel",
            "Griffon belge", "Griffon bruxellois", "Kleine Keeshond", 
            "Lhasa Apso", "Maltezer", "Mopshond", "Pekingees", "Petit Brabançon",
            "Shih Tzu", "Tibetaanse Spaniel", "Volpino Italiano", "Yorkshire Terrier")

我尝试了这个:

for (i in 1:nrow(brachquest2)){
     ifelse((brachquest2$rasnaam %in% small_dogs), (brachquest2 <- brachquest2[!(brachquest2$age_month < 9), ]), 
     ifelse((brachquest2$rasnaam %in% medium_dogs)), (brachquest2 <- brachquest2[!(brachquest2$age_month < 13), ]), 
     (brachquest2 <- brachquest2[!(brachquest2$age_month < 24), ]))
            }

但是然后我得到一个未使用的参数错误。然后我尝试使用case_when(),但是我对这个函数不熟悉,所以也许我在使用它时非常错误:

brachquest2 <- case_when(
  brachquest2$rasnaam %in% small_dogs ~ brachquest2[!(brachquest2$age_month < 11), ],
  brachquest2$rasnaam %in% medium_dogs ~ brachquest2[!(brachquest2$age_month < 13), ]
  )

然后我得到一个错误:必须是长度66或一个,而不是18。

(行数为66)

我希望我能解释清楚。有人对我有用吗?或者,它可能更简单,每一个帮助都值得赞赏!!提前致谢

以下是对neilfws的反应,只有age_month和rasnaam的结果。我不确定这是否是正确的方法

structure(list(age_month = structure(c(50, 52, 52.1, 49.7, 49.7, 
49.6, 49.6, 49.6, 49.5, 50, 48.8, 52.1, 51.9, 48.7, 50, 50.2, 
50.4, 50.5, 49, 49, 49, 49, 49, 48.9, 15, 17.6, 17.6, 17.6, 17.6, 
16.3, 17.6, 17.6, 15, 15.8, 16, 16.2, 17.5, 14.9, 10.4, 10.2, 
10.5, 10.4, 10.3, 10.3, 10.2, 10.3, 10.3, 10.3, 12.8, 12.8, 12.8, 
12.8, 12.8, 10, 10.4, 10.2, 10.3, 10.3, 12.7, 12.7, 13.2, 13.2, 
13.1, 13.1, 12.7, 12.7), units = "days", class = "difftime"), 
    rasnaam = c("American Staffordshire Terrier", "Boxer", "Bull Terrier", 
    "Chihuahua, langhaar", "Chihuahua, langhaar", "Chihuahua, langhaar", 
    "Chihuahua, langhaar", "Chihuahua, langhaar", "Chihuahua, langhaar", 
    "Chihuahua, langhaar", "Franse Bulldog", "Franse Bulldog", 
    "Labrador Retriever", "Shih Tzu", "American Staffordshire Terrier", 
    "American Staffordshire Terrier", "American Staffordshire Terrier", 
    "American Staffordshire Terrier", "American Staffordshire Terrier", 
    "American Staffordshire Terrier", "American Staffordshire Terrier", 
    "American Staffordshire Terrier", "American Staffordshire Terrier", 
    "American Staffordshire Terrier", "American Staffordshire Terrier", 
    "Boxer", "Boxer", "Boxer", "Boxer", "Boxer", "Bull Terrier", 
    "Bull Terrier", "Chihuahua, langhaar", "Chihuahua, langhaar", 
    "Chihuahua, langhaar", "Chihuahua, langhaar", "Chihuahua, langhaar", 
    "Franse Bulldog", "Franse Bulldog", "Franse Bulldog", "Franse Bulldog", 
    "Franse Bulldog", "Labrador Retriever", "Labrador Retriever", 
    "Labrador Retriever", "Labrador Retriever", "Labrador Retriever", 
    "Labrador Retriever", "Labrador Retriever", "Labrador Retriever", 
    "Labrador Retriever", "Labrador Retriever", "Labrador Retriever", 
    "Shih Tzu", "Shih Tzu", "Shih Tzu", "Shih Tzu", "Shih Tzu", 
    "American Staffordshire Terrier", "Boxer", "Franse Bulldog", 
    "Franse Bulldog", "Shih Tzu", "Shih Tzu", "American Staffordshire Terrier", 
    "Boxer")), row.names = c(NA, -66L), class = "data.frame")
射线

如果您想坚持使用using case_when,那么这是实现所需内容的一种方法:

library(dplyr)

brachquest2 %>%
  mutate(
    # Create a temp var, removal_status, to label what rows should be kept or removed
    removal_status = case_when(
      (rasnaam %in% small_dogs) & age_month < 9 ~ "Remove",
      (rasnaam %in% medium_dogs) & age_month < 13 ~ "Remove",
      (rasnaam %in% large_dogs) & age_month < 24 ~ "Remove",
      TRUE ~ "Keep"
    )) %>% 
  # Keep only what's labelled "Keep"
  filter(removal_status == "Keep") %>% 
  # Remove temp var
  select(-removal_status)

使用small_dogs您提供的清单并创建自己的清单,medium_dogs其中只有一个值是拳击手,我得到了以下信息(2个年龄在13个月以下的拳击手被删除):

#   age_month                        rasnaam
# 1  50.0 days American Staffordshire Terrier
# 2  52.0 days                          Boxer
# 3  52.1 days                   Bull Terrier
# 4  49.7 days            Chihuahua, langhaar
# 5  49.7 days            Chihuahua, langhaar
# 6  49.6 days            Chihuahua, langhaar
# 7  49.6 days            Chihuahua, langhaar
# 8  49.6 days            Chihuahua, langhaar
# 9  49.5 days            Chihuahua, langhaar
# 10 50.0 days            Chihuahua, langhaar
# 11 48.8 days                 Franse Bulldog
# 12 52.1 days                 Franse Bulldog
# 13 51.9 days             Labrador Retriever
# 14 48.7 days                       Shih Tzu
# 15 50.0 days American Staffordshire Terrier
# 16 50.2 days American Staffordshire Terrier
# 17 50.4 days American Staffordshire Terrier
# 18 50.5 days American Staffordshire Terrier
# 19 49.0 days American Staffordshire Terrier
# 20 49.0 days American Staffordshire Terrier
# 21 49.0 days American Staffordshire Terrier
# 22 49.0 days American Staffordshire Terrier
# 23 49.0 days American Staffordshire Terrier
# 24 48.9 days American Staffordshire Terrier
# 25 15.0 days American Staffordshire Terrier
# 26 17.6 days                          Boxer
# 27 17.6 days                          Boxer
# 28 17.6 days                          Boxer
# 29 17.6 days                          Boxer
# 30 16.3 days                          Boxer
# 31 17.6 days                   Bull Terrier
# 32 17.6 days                   Bull Terrier
# 33 15.0 days            Chihuahua, langhaar
# 34 15.8 days            Chihuahua, langhaar
# 35 16.0 days            Chihuahua, langhaar
# 36 16.2 days            Chihuahua, langhaar
# 37 17.5 days            Chihuahua, langhaar
# 38 14.9 days                 Franse Bulldog
# 39 10.4 days                 Franse Bulldog
# 40 10.2 days                 Franse Bulldog
# 41 10.5 days                 Franse Bulldog
# 42 10.4 days                 Franse Bulldog
# 43 10.3 days             Labrador Retriever
# 44 10.3 days             Labrador Retriever
# 45 10.2 days             Labrador Retriever
# 46 10.3 days             Labrador Retriever
# 47 10.3 days             Labrador Retriever
# 48 10.3 days             Labrador Retriever
# 49 12.8 days             Labrador Retriever
# 50 12.8 days             Labrador Retriever
# 51 12.8 days             Labrador Retriever
# 52 12.8 days             Labrador Retriever
# 53 12.8 days             Labrador Retriever
# 54 10.0 days                       Shih Tzu
# 55 10.4 days                       Shih Tzu
# 56 10.2 days                       Shih Tzu
# 57 10.3 days                       Shih Tzu
# 58 10.3 days                       Shih Tzu
# 59 12.7 days American Staffordshire Terrier
# 60 13.2 days                 Franse Bulldog
# 61 13.2 days                 Franse Bulldog
# 62 13.1 days                       Shih Tzu
# 63 13.1 days                       Shih Tzu
# 64 12.7 days American Staffordshire Terrier

调整列表和您认为合适的age_month条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从熊猫数据框列中删除不符合条件的值?

如何在MongoDB聚合管道中删除不符合过滤条件的结果?

为什么dplyr删除值不符合条件?

Powershell:如何从文本文件中不符合条件的行中删除 CRLF

如何从不符合条件的数组中删除某些值?

在R环境中删除不符合条件的对象

在输入不符合条件的数据框中删除/编辑行

MSSQL选择不符合条件的行

类型“ ...”的值在赋值中不符合“ ...”

MongoDB Java查找文档并过滤数组字段(删除不符合条件的数组数据)

如何过滤掉不符合R中指定条件的行

自动过滤掉不符合Doctrine条件的行

如果其他列值不符合条件,则熊猫会更改列的值

过滤功能,如果数据不符合条件,提示错误

有条件地删除行不符合熊猫的预期

如何删除不符合所有条件的所有行(每个组)?

熊猫:如何使用计数器删除不符合特定条件的行?

条件不符合C

Haskell 映射但删除不符合条件的项目

如何修改/删除不符合列的正则表达式模式的 R 行?

SQL如何获取不符合给定条件的行

消除不符合匹配条件的数组行

指出不符合行格式错误的条件

熊猫:删除日期不符合指定格式的行

如何使用R突出显示Excel中不符合所需条件的列

如何标记不符合单独列的特定条件的熊猫中的组?

通过比较另一列中前几行中的值,需要帮助在不符合条件时将总和值重置为零

在mongodb中删除重复项的行为不符合预期

选择不符合指定值的行(多个条目)