r语言 - dplyr with row_number, ifelse and mutate



我正在尝试使用以下语法使用dplyr

Group_by(PersonID) %>% 
mutate(event_number = ifelse(row_number()==2 & x > y, 1, 2)

我在这样的数据上运行这个命令,并试图获得even_number col 中所示的输出

PersonID, X, Y , event_number
1,        5, 9, 1
1,        8, 5, 1
2,        3, 3, 1
2,        5, 9, 2

由于超出我的某些原因,CCD_ 1对于所有内容都显示为2。

如有任何帮助,我们将不胜感激。

根据您的示例,不清楚您的问题是什么。如果我基于以上数据创建一个数据帧:

library(dplyr)

df <- data.frame("PersonID" = c(1,1,2,2),
"X" = c(5,8,3,5),
"Y" = c(9,5,3,9))

我得到:

print(df)
PersonID X Y
1        1 5 9
2        1 8 5
3        2 3 3
4        2 5 9

运行上面的dplyr代码会产生以下输出:

df %>% group_by(PersonID) %>% 
mutate(event_number = ifelse(row_number()==2 & X > Y, 1, 2))

# A tibble: 4 x 4
# Groups:   PersonID [2]
PersonID     X     Y event_number
<dbl> <dbl> <dbl>        <dbl>
1        1     5     9            2
2        1     8     5            1
3        2     3     3            2
4        2     5     9            2

考虑到你的条件,这是完全合理的。如果行号等于2,X大于Y,则得到1,否则得到2。

注意ifelse(逻辑条件,TRUE输出,FALSE输出(

因此,在该样本数据中,条件行号=2在行2中仅满足一次。这已经意味着所有其他行都将返回2。如果在原始数据中X<Y、 那么你的一组条件永远不会满足,因此处处返回2。

相关内容

最新更新