R在满足3个条件的情况下比较一列中的行值
R Comparing row values in one column given that 3 conditions are fulfilled
虽然我在 Whosebug 上搜索了很多,但我找不到问题的答案。这非常棘手,因为在满足 3 个条件的情况下,我只想比较一列中的行值。
当且仅当它们处于相同的治疗、组和时期时,我想比较同一列(结果)中的 2 行值。然后我的目标是评估玩家 1 和玩家 2 是否获得相同的结果(1 = 如果是,0 = 如果不是)。我总共有五个专栏:治疗;播放器;团体;结果;时期。
table 下方。
df
T Player Group Result Period Same Result
1 1 6 20 1 1
1 2 6 20 1 1
1 1 5 20 1 0
1 2 1 20 1 1
1 1 1 20 1 1
1 2 2 20 1 1
1 1 2 20 1 1
1 2 4 120 1 1
1 1 3 20 1 1
1 2 3 20 1 1
1 1 4 120 1 1
1 2 5 120 1 0
2 1 2 20 1 1
2 2 1 120 1 1
2 1 4 20 1 0
2 2 5 20 1 1
2 1 6 20 1 1
2 2 2 20 1 1
2 1 3 20 1 1
2 2 3 20 1 1
2 1 1 120 1 1
2 2 6 20 1 1
2 1 5 20 1 1
2 2 4 120 1 0
有什么想法吗?帮助将不胜感激。
非常感谢!
使用 tidyverse
您可以执行以下操作。首先,group_by
您感兴趣的 3 列:治疗、组和时期。然后,对每个组使用 n_distinct
以查看该组是否只有 1 个唯一结果。
library(tidyverse)
df %>%
group_by(T, Group, Period) %>%
mutate(Same_Result_2 = +(n_distinct(Result) == 1))
替代 data.table
套餐:
library(data.table)
setDT(df)
df[, Same_Result_3 := if(uniqueN(Result)==1) 1 else 0, by=.(T, Group, Period)]
输出
Same_Result_1
是示例中提供的值。 Same_Result_2
由上面的 tidyverse
代码确定。
# A tibble: 24 x 7
# Groups: T, Group, Period [12]
T Player Group Result Period Same_Result_1 Same_Result_2
<int> <int> <int> <int> <int> <int> <int>
1 1 1 6 20 1 1 1
2 1 2 6 20 1 1 1
3 1 1 5 20 1 0 0
4 1 2 1 20 1 1 1
5 1 1 1 20 1 1 1
6 1 2 2 20 1 1 1
7 1 1 2 20 1 1 1
8 1 2 4 120 1 1 1
9 1 1 3 20 1 1 1
10 1 2 3 20 1 1 1
11 1 1 4 120 1 1 1
12 1 2 5 120 1 0 0
13 2 1 2 20 1 1 1
14 2 2 1 120 1 1 1
15 2 1 4 20 1 0 0
16 2 2 5 20 1 1 1
17 2 1 6 20 1 1 1
18 2 2 2 20 1 1 1
19 2 1 3 20 1 1 1
20 2 2 3 20 1 1 1
21 2 1 1 120 1 1 1
22 2 2 6 20 1 1 1
23 2 1 5 20 1 1 1
24 2 2 4 120 1 0 0
虽然我在 Whosebug 上搜索了很多,但我找不到问题的答案。这非常棘手,因为在满足 3 个条件的情况下,我只想比较一列中的行值。 当且仅当它们处于相同的治疗、组和时期时,我想比较同一列(结果)中的 2 行值。然后我的目标是评估玩家 1 和玩家 2 是否获得相同的结果(1 = 如果是,0 = 如果不是)。我总共有五个专栏:治疗;播放器;团体;结果;时期。 table 下方。
df
T Player Group Result Period Same Result
1 1 6 20 1 1
1 2 6 20 1 1
1 1 5 20 1 0
1 2 1 20 1 1
1 1 1 20 1 1
1 2 2 20 1 1
1 1 2 20 1 1
1 2 4 120 1 1
1 1 3 20 1 1
1 2 3 20 1 1
1 1 4 120 1 1
1 2 5 120 1 0
2 1 2 20 1 1
2 2 1 120 1 1
2 1 4 20 1 0
2 2 5 20 1 1
2 1 6 20 1 1
2 2 2 20 1 1
2 1 3 20 1 1
2 2 3 20 1 1
2 1 1 120 1 1
2 2 6 20 1 1
2 1 5 20 1 1
2 2 4 120 1 0
有什么想法吗?帮助将不胜感激。 非常感谢!
使用 tidyverse
您可以执行以下操作。首先,group_by
您感兴趣的 3 列:治疗、组和时期。然后,对每个组使用 n_distinct
以查看该组是否只有 1 个唯一结果。
library(tidyverse)
df %>%
group_by(T, Group, Period) %>%
mutate(Same_Result_2 = +(n_distinct(Result) == 1))
替代 data.table
套餐:
library(data.table)
setDT(df)
df[, Same_Result_3 := if(uniqueN(Result)==1) 1 else 0, by=.(T, Group, Period)]
输出
Same_Result_1
是示例中提供的值。 Same_Result_2
由上面的 tidyverse
代码确定。
# A tibble: 24 x 7
# Groups: T, Group, Period [12]
T Player Group Result Period Same_Result_1 Same_Result_2
<int> <int> <int> <int> <int> <int> <int>
1 1 1 6 20 1 1 1
2 1 2 6 20 1 1 1
3 1 1 5 20 1 0 0
4 1 2 1 20 1 1 1
5 1 1 1 20 1 1 1
6 1 2 2 20 1 1 1
7 1 1 2 20 1 1 1
8 1 2 4 120 1 1 1
9 1 1 3 20 1 1 1
10 1 2 3 20 1 1 1
11 1 1 4 120 1 1 1
12 1 2 5 120 1 0 0
13 2 1 2 20 1 1 1
14 2 2 1 120 1 1 1
15 2 1 4 20 1 0 0
16 2 2 5 20 1 1 1
17 2 1 6 20 1 1 1
18 2 2 2 20 1 1 1
19 2 1 3 20 1 1 1
20 2 2 3 20 1 1 1
21 2 1 1 120 1 1 1
22 2 2 6 20 1 1 1
23 2 1 5 20 1 1 1
24 2 2 4 120 1 0 0