Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R按ID比较同一数据集中的行,以确定一行是否在一行之前_R_Dplyr_Tidyverse - Fatal编程技术网

R按ID比较同一数据集中的行,以确定一行是否在一行之前

R按ID比较同一数据集中的行,以确定一行是否在一行之前,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我试图编写一个代码,按Id对数据进行分组,并比较每个观察值,以确定列中的值是否在另一个值之后。如果一个以特定顺序出现在另一个之后,则观察结果将显示是或否 这是我的数据集: ID Initial Review Type P40 Yes Meeting1 P40 Yes Meeting2 P42 Yes Meeting1 P42 Yes Meeting1 P43

我试图编写一个代码,按Id对数据进行分组,并比较每个观察值,以确定列中的值是否在另一个值之后。如果一个以特定顺序出现在另一个之后,则观察结果将显示是或否

这是我的数据集:

ID  Initial Review      Type
P40 Yes                 Meeting1
P40         Yes         Meeting2
P42 Yes                 Meeting1
P42 Yes                 Meeting1
P43 Yes                 Meeting1
P43         Yes         Meeting2
P44 Yes                 Meeting1
P44 Yes                 Meeting1
这就是我想要实现的目标:

ID  Outcome 
P40 Yes     
P42 No  
P43 Yes 
P44 No
这段代码不是我想要它做的。对不起,我是R的新手

tt %>% group_by(ID) %>% mutate(outcome = ifelse(Type == "Meeting1" & Type == "Meeting2", "Yes", "No")) %>% select(ID, outcome)

如果“Meeting1”和“Meeting2”是“类型”列中的唯一值,在按“ID”分组后,检查唯一元素的长度(
n_distinct
)是否等于2,如果是,则返回标志为“是”或“否”

tt %>%
   group_by(ID) %>%
   summarise(Outcome = c("No", "Yes")[(n_distinct(Type) == 2) + 1])
# A tibble: 4 x 2
#  ID    Outcome
#  <chr> <chr>  
#1 P40   Yes    
#2 P42   No     
#3 P43   Yes    
#4 P44   No     
数据
tt你在总结中的什么地方加了1?@NartRazak对不起,我是说2。更改了@akrun的措辞,很抱歉在这行中添加1:c(“否”、“是”)[所有(c(“调查”、“会议”)%在%EventType中)+1]@NartRazak没问题。注意%
==
中的
%的输出逻辑正确/错误。它将被编码为1/0。R中的索引从1开始。所以,如果我们把它改为2/1,那么我们就可以用一个向量来替换,其他值的顺序也是一样的。在这里,我们使用
c(“No”,“Yes”)
,以便根据这里的值顺序,“Yes”替换2,“No”替换第一个
tt %>%
   group_by(ID) %>%
   summarise(Outcome = c("No", "Yes")[all(c("Meeting1", "Meeting2") %in% Type) + 1])
tt <- structure(list(ID = c("P40", "P40", "P42", "P42", "P43", "P43", 
"P44", "P44"), Initial = c("Yes", "", "Yes", "Yes", "Yes", "", 
"Yes", "Yes"), Review = c("", "Yes", "", "", "", "Yes", "", ""
), Type = c("Meeting1", "Meeting2", "Meeting1", "Meeting1", "Meeting1", 
"Meeting2", "Meeting1", "Meeting1")), 
class = "data.frame", row.names = c(NA, 
-8L))