如何使用 R 根据行值将一个数据框的值分配给另一个数据框?

问题描述 投票:0回答:1

我有以下数据集 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 中遇到了一堵墙,真的可以使用帮助。任何投入将不胜感激。谢谢!

r data-manipulation
1个回答
0
投票

使用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
中提取字面行号的原因是我们没有其他“加入”标准。

© www.soinside.com 2019 - 2024. All rights reserved.