我在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] 删除。
我来说两句