【发布时间】:2018-11-18 20:26:28
【问题描述】:
我正在尝试进行一些条件操作,并发现一个奇怪的 dplyr 错误 - 或者至少它的行为不像我认为的那样。
假设我有一个 tibble
a <- tribble(
~x, ~y,
1, 2,
1, 3,
1, -5,
2, 1,
2, 8,
2, 9
)
现在,对于每个组 (x),如果其中任何一个值为负数,我想将其提高,这样以前的负值中的最小值现在为 0。让我们也进行一些错误检查以确保 @987654322 @ 工作正常。
a %>%
group_by(x) %>%
mutate(hasneg = any(y<0),
y_star = ifelse(any(y<0), y+abs(min(y, na.rm=T)), y))
这会产生
# A tibble: 6 x 4
# Groups: x [2]
x y hasneg y_star
<dbl> <dbl> <lgl> <dbl>
1 1 2 TRUE 7
2 1 3 TRUE 7
3 1 -5 TRUE 7
4 2 1 FALSE 1
5 2 8 FALSE 1
6 2 9 FALSE 1
现在,hasneg 对于 x=1 为 TRUE,对于 x=0 为 FALSE,这意味着它在向量上正常工作。然而,我的 ifelse 语句产生了一些奇怪的东西——要么 2+5 表示 x=1,要么 1 表示 x=2。我本来预计是 7,8,0,1,8,9。
这里发生了什么?为什么 ifelse 在分组数据框中处理这些向量时会出现奇怪的现象?
【问题讨论】: