我有以下数据集 DF1 和 DF2。我希望按照它在 DF1 中的行的顺序从 DF2 的 Col3 分配值。请注意,As 和 Cs 从 Col3 获得唯一值,但所有 B 都获得一个值,没有特定值,但第一个可用值,在本例中它是 11,因为 As 已用完值 1-9。只要 DF1 中还有需要值的行,Col3 中的值就会按照它们所在的顺序(升序)分配给 DF1。 (请查看所需的输出)。
DF1
Col1 | Col2 |
---|---|
99 | A1 |
99 | A2 |
99 | A3 |
99 | A4 |
99 | A5 |
99 | B1 |
99 | B2 |
99 | B3 |
99 | B4 |
99 | C1 |
99 | C2 |
DF2
Col3 |
---|
1 |
3 |
5 |
7 |
9 |
11 |
13 |
15 |
17 |
19 |
21 |
23 |
期望的输出
Col1 | Col2 | Col3 |
---|---|---|
99 | A1 | 1 |
99 | A2 | 3 |
99 | A3 | 5 |
99 | A4 | 7 |
99 | A5 | 9 |
99 | B1 | 11 |
99 | B2 | 11 |
99 | B3 | 11 |
99 | B4 | 11 |
99 | C1 | 13 |
99 | C2 | 15 |
这是一个非常大的数据集的一部分,我通常在 excel 中手动执行此操作。我在 R 中遇到了一堵墙,真的可以使用帮助。任何投入将不胜感激。谢谢!
使用dplyr,
library(dplyr)
DF1 %>%
mutate(
ltr1 = substr(Col2, 1, 1),
rn = cumsum(ltr1 != "B" | lag(ltr1, default=ltr1[1]) != "B"),
Col3 = DF2$Col3[rn]
) %>%
select(-ltr1, -rn)
# Col1 Col2 Col3
# 1 99 A1 1
# 2 99 A2 3
# 3 99 A3 5
# 4 99 A4 7
# 5 99 A5 9
# 6 99 B1 11
# 7 99 B2 11
# 8 99 B3 11
# 9 99 B4 11
# 10 99 C1 13
# 11 99 C2 15
我从
DF2
中提取字面行号的原因是我们没有其他“加入”标准。