如果列匹配,则从另一列中获取值并将其分配给新变量
If columns match, take value from another column and assign it to a new variable
我有一个数据集,其中包含一组 id 变量和一对 id 变量。每个观察都与另一个观察配对。我想创建一个新变量,该变量采用其配对伙伴的 id 变量并将其分配为新的 'partner' 变量。
下面我有一个示例数据:
id <- 1:10
pair_id <- rep(1:5,2)
df <- cbind(id, pair_id)
> df
id pair_id
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
[5,] 5 5
[6,] 6 1
[7,] 7 2
[8,] 8 3
[9,] 9 4
[10,] 10 5
正如我上面所说,我想添加一个变量来指示每个 id
伙伴的 id
,其中伙伴关系用 pair_id
标识。例如,具有 id == 1
的观测值具有 pair_id == 1
,这使得它成为具有 id == 6
的观测值的伙伴,因为它们共享 pair_id
.
所以最终结果应该是这样的:
id pair_id partner_id
[1,] 1 1 6
[2,] 2 2 7
[3,] 3 3 8
[4,] 4 4 9
[5,] 5 5 10
[6,] 6 1 1
[7,] 7 2 2
[8,] 8 3 3
[9,] 9 4 4
[10,] 10 5 5
谢谢!
您可以反转每个 pair_id
的 id
值:
library(dplyr)
df %>% group_by(pair_id) %>% mutate(partner_id = rev(id))
# id pair_id partner_id
# <int> <int> <int>
# 1 1 1 6
# 2 2 2 7
# 3 3 3 8
# 4 4 4 9
# 5 5 5 10
# 6 6 1 1
# 7 7 2 2
# 8 8 3 3
# 9 9 4 4
#10 10 5 5
基本 R 中的等价物:
df$partner_id <- with(df, ave(id, pair_id, FUN = rev))
在data.table
中是
library(data.table)
setDT(df)[, partner_id := rev(id), pair_id]
数据
df <- data.frame(id, pair_id)
我们可以使用
library(dplyr)
df %>%
group_by(pair_id) %>%
mutate(partner_id = id[n():1])
我有一个数据集,其中包含一组 id 变量和一对 id 变量。每个观察都与另一个观察配对。我想创建一个新变量,该变量采用其配对伙伴的 id 变量并将其分配为新的 'partner' 变量。
下面我有一个示例数据:
id <- 1:10
pair_id <- rep(1:5,2)
df <- cbind(id, pair_id)
> df
id pair_id
[1,] 1 1
[2,] 2 2
[3,] 3 3
[4,] 4 4
[5,] 5 5
[6,] 6 1
[7,] 7 2
[8,] 8 3
[9,] 9 4
[10,] 10 5
正如我上面所说,我想添加一个变量来指示每个 id
伙伴的 id
,其中伙伴关系用 pair_id
标识。例如,具有 id == 1
的观测值具有 pair_id == 1
,这使得它成为具有 id == 6
的观测值的伙伴,因为它们共享 pair_id
.
所以最终结果应该是这样的:
id pair_id partner_id
[1,] 1 1 6
[2,] 2 2 7
[3,] 3 3 8
[4,] 4 4 9
[5,] 5 5 10
[6,] 6 1 1
[7,] 7 2 2
[8,] 8 3 3
[9,] 9 4 4
[10,] 10 5 5
谢谢!
您可以反转每个 pair_id
的 id
值:
library(dplyr)
df %>% group_by(pair_id) %>% mutate(partner_id = rev(id))
# id pair_id partner_id
# <int> <int> <int>
# 1 1 1 6
# 2 2 2 7
# 3 3 3 8
# 4 4 4 9
# 5 5 5 10
# 6 6 1 1
# 7 7 2 2
# 8 8 3 3
# 9 9 4 4
#10 10 5 5
基本 R 中的等价物:
df$partner_id <- with(df, ave(id, pair_id, FUN = rev))
在data.table
中是
library(data.table)
setDT(df)[, partner_id := rev(id), pair_id]
数据
df <- data.frame(id, pair_id)
我们可以使用
library(dplyr)
df %>%
group_by(pair_id) %>%
mutate(partner_id = id[n():1])