按组将向量分配给更长的向量
Assign vector to longer vector by group
我一直在努力为某些数据中的某些组分配值,但我有点卡住了。我试过 match
ing unique
和 rep
等。我希望这里有人能帮助我。
我有一个看起来像这样的数据集
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()
设计。
我一直在努力为某些数据中的某些组分配值,但我有点卡住了。我试过 match
ing unique
和 rep
等。我希望这里有人能帮助我。
我有一个看起来像这样的数据集
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()
设计。