我正在尝试根据变量中存在的一些观察来操纵某些数据
我有以下代码:
beg.new1 <-c(1,2,3,1,2,3,0,0)
dive_type1<-c('stocked', 'stocked', 'stocked', 'stocked',
'stocked', 'stocked', 'stocked', 'stocked')
dt<-data.frame(beg.new1, dive_type1)
dt%>%
mutate_all(as.character)%>%
mutate(beg.new1=case_when(beg.new1 %in% c('3','4') & dive_type1=="Pre-
stocking" |dive_type1=="Prestocking" ~ '3',
beg.new1 %in% c('0', '1', '2')~ '0',
TRUE~as.character(beg.new1)))
我希望它不会返回任何数据,因为此时在数据中未观察到“预库存”和“预库存”。我正在尝试过滤数据,以使beg.new1'3'仅在潜水类型'Prestocking'等下返回。但是,R在'stocked'下返回beg.new1'3'!任何帮助将不胜感激
答案 0 :(得分:1)
您可以将其改写为:
dt %>%
mutate_all(as.character) %>%
mutate(
beg.new1 = case_when(
beg.new1 %in% c('3','4') & dive_type1 %in% c("Pre-stocking", "Prestocking") ~ '3',
beg.new1 %in% c('0', '1', '2') | (beg.new1 %in% c('3', '4') & dive_type1 == "stocked") ~ '0',
TRUE ~ beg.new1
)
)
输出:
beg.new1 dive_type1
1 0 stocked
2 0 stocked
3 0 stocked
4 0 stocked
5 0 stocked
6 0 stocked
7 0 stocked
8 0 stocked
问题是您没有指定在dive_type1
等于stocked
并且第一列中的值大于2的情况下会发生什么;因此,这是通过TRUE
处理的,即保留了原始值。