按组将向量分配给更长的向量

Assign vector to longer vector by group

我一直在努力为某些数据中的某些组分配值,但我有点卡住了。我试过 matching uniquerep 等。我希望这里有人能帮助我。

我有一个看起来像这样的数据集

df <- data.frame(
GRP.id  = c(1, 2, 2, 2, 3, 3),
group  = c("A", "B", "B", "B", "C", "C"))
> df
  GRP.id group
1      1     A
2      2     B
3      2     B
4      2     B
5      3     C
6      3     C

和一个向量,其中包含一些需要分配给每个组的值

value <- c(.3, .8, .3)

这样我就得到了这个结果

  GRP.id group value
1      1     A   0.3
2      2     B   0.8
3      2     B   0.8
4      2     B   0.8
5      3     C   0.3
6      3     C   0.3
df$value <- value[match(df$GRP.id,unique(df$GRP.id))];
df;
##   GRP.id group value
## 1      1     A   0.3
## 2      2     B   0.8
## 3      2     B   0.8
## 4      2     B   0.8
## 5      3     C   0.3
## 6      3     C   0.3

如果您知道 df$GRP.id 列将始终由 1:n 组成,最大 n,那么您可以将 match(df$GRP.id,unique(df$GRP.id)) 部分替换为df$GRP.id。但是为了稳健性(即以防万一假设并不总是正确的)我会选择 match()/unique() 设计。