根据其他列的顺序,R 中的不同行

distinct rows in R based on the order of other columns

我进行了多期在线实验,但存在部分重复和不完整的数据。

简单地说,在线实验中有2个试验(试验1:2),每个试验包含2个周期(周期1:2)。参与者做出决定(1:5)猜测一个不变的性质(1:5)在 2 个试验阶段。试用后,性质发生变化运行domly.

我发现参与者可能会卡在一段时间内,不得不重做实验,这会导致我的数据出现重复和不完整的试验。

例如:

id decision nature period trial
1000 1 5 1 1
1000 1 5 2 1
1000 1 5 1 2
1000 1 5 2 2
1000 1 5 1 3
1000 2 2 1 1
1000 3 2 2 1
1000 1 2 1 2
1000 3 2 2 2
1000 5 2 1 3
1000 1 2 2 3

如您所见,在第一次尝试中,试验 3 未完成,因为该参与者被卡住了,不得不重做实验,从而导致重复数据。

我运行一个不同的函数r代码:distinct(id, trial,period,.keep_all = TRUE), 但我得到了这个

id decision nature period trial
1000 1 5 1 1
1000 1 5 2 1
1000 1 5 1 2
1000 1 5 2 2
1000 1 5 1 3
1000 5 2 1 3

试验 3 中的不同性质值表明 Distinct 函数混合了该参与者的两次不同尝试。如何使用 R 中的 distinct 或其他函数来获取同一尝试中参与者的完整数据?

我想要的输出是为每个参与者保留一组完整的试验 (1:3),其中自然值在试验中是一致的,并消除所有重复和不完整的试验。

提前致谢!

这是您要找的吗?

## data
data <- structure(list(id = c(1000L, 1000L, 1000L, 1000L, 1000L, 1000L,
1000L, 1000L, 1000L, 1000L, 1000L), decision = c(1L, 1L, 1L,
1L, 1L, 2L, 3L, 1L, 3L, 5L, 1L), nature = c(5L, 5L, 5L, 5L, 5L,
2L, 2L, 2L, 2L, 2L, 2L), period = c(1L, 2L, 1L, 2L, 1L, 1L, 2L,
1L, 2L, 1L, 2L), trial = c(1L, 1L, 2L, 2L, 3L, 1L, 1L, 2L, 2L,
3L, 3L)), row.names = c(NA, -11L), class = "data.frame")



library(dplyr)
data %>% 
    mutate(rownum = 1:n()) %>% 
    group_by(id, trial, period) %>%
    mutate(maxrownum = max(rownum)) %>% 
    filter(rownum == maxrownum) %>% 
    select(-c(rownum, maxrownum))

我已经为行号创建了一个标识符。假设您的数据是按尝试排序的,选择行号等于 max(row number) 的行会选择每个 (id, trial, period) 三元组的最后一次尝试。

输出:

# Groups:   id, trial, period [6]
     id decision nature period trial
  <int>    <int>  <int>  <int> <int>
1  1000        2      2      1     1
2  1000        3      2      2     1
3  1000        1      2      1     2
4  1000        3      2      2     2
5  1000        5      2      1     3
6  1000        1      2      2     3