【发布时间】:2019-08-05 07:44:00
【问题描述】:
我正在尝试根据使用mutate 和plyr 的多个条件在我的长格式数据集中创建一个新列source2。
为了获得新值,我正在寻找我的组中的因子数量。如果只有一个级别,请使用此级别。但是,如果有距离值的组合,请相应地设置:
distance == "b20" & distance == "b5" => "buffer",
distance == "PA" & distance == "b5") => "pa_buff20",
distance == "PA" & distance == "b20") => "pa_buff500"
我认为嵌套的ifelse 语句应该这样做,但似乎我的组合不起作用。是因为我首先检查了级别数吗?
(组数的第一个ifelse也是我可能不能简单使用case_when的原因。
我的虚拟数据集:
# how to find a year when a lag value overpass the certain threshold
df<- data.frame(year = c(1,1,2,1,5,5,10),
distance = c("b20", "b5", "b20", "b20", "PA", "b5", "PA"),
site = c("a", "a", "b", "c", "d", "d", "e"))
# Create new columns based on number of levels in `distance`
df %>%
group_by(site) %>%
mutate(source = ifelse(n_distinct(distance) == 1, # create source column based of number of factors
as.character(distance[1]), 'unclear')) %>%
mutate(source2 = ifelse(n_distinct(distance) == 1, # create source column based of number of factors
as.character(distance[1]),
ifelse(distance == "b20" & distance == "b5"), "buffer",
ifelse(distance == "PA" & distance == "b5"), "pa_buff20",
ifelse(distance == "PA" & distance == "b20"), "pa_buff500")) %>%
print()
我有和Error in ifelse(n_distinct(distance) == 1, as.character(distance[1]), :
unused arguments ("buffer", ifelse(distance == "PA" & distance == "b5"), "pa_buff20", ifelse(distance == "PA" & distance == "b20"), "pa_buff500")
如何更正此ifelse 声明?
预期输出:
year distance site source source2
<dbl> <fct> <fct> <chr> <chr>
1 1 b20 a unclear buffer
2 1 b5 a unclear buffer
3 2 b20 b b20 b20
4 1 b20 c b20 b20
5 5 PA d unclear pa_buff20
6 5 b5 d unclear pa_buff20
7 10 PA e PA PA
【问题讨论】: