我正在尝试使用以下语法使用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。