我有以下数据集DF 1和DF 2。我希望从DF 2中的Col 3中按顺序分配值到DF 1中的行。请注意,从As和Cs中获得Col 3的唯一值,但所有B都获得一个值,没有具体的,但第一个可用,在本例中,As耗尽值1-9为11。来自第3列的值将按顺序分配给DF 1(升序),只要DF 1中还有需要值的行。(请参见所需输出)。
DF1
| Col1|Col2|
| --------------|--------------|
| 九九|A1|
| 九九|A2|
| 九九|A3|
| 九九|A4|
| 九九|A5|
| 九九|B1|
| 九九|B2|
|98|B3|
|98|B4|
| 九九|C1|
| 九九|C2|
DF2
| Col3|
| --------------|
| 1|
| 三|
| 五|
| 七|
| 九|
| 十一|
| 十三|
| 十五岁|
| 十七岁|
| 十九岁|
| 二十一|
| 二十三|
期望输出
Col1 | Col2 | Col3 |
---|---|---|
九九 | A1 | 1 |
九九 | A2 | 三 |
九九 | A3 | 五 |
九九 | A4 | 七 |
九九 | A5 | 九 |
九九 | B1 | 十一 |
九九 | B2 | 十一 |
98 | B3 | 十三 |
98 | B4 | 十三 |
九九 | C1 | 十五岁 |
九九 | C2 | 十七岁 |
这是一个非常大的数据集的一部分,我通常在Excel中手动完成。我在R中遇到了一堵墙,真的可以使用帮助。任何输入都将非常感谢。谢谢!
1条答案
按热度按时间huus2vyu1#
使用dplyr
我之所以从
DF2
中提取文字行号,是因为我们没有其他的“连接”条件。演练:
cumsum(.)
是一个递增器:当条件为真时,则rn
递增。对于Col2
中不包含"B*"
的每一行,这应该按1排序。ltr1 != "B" | lag(..) != "B"
确保在"B"
行中或前一行是"B"
行时,不允许cumsum
递增。Col1 != lag(Col1)
增加了Col1
中的更改会导致DF2
中使用的行号(rn
)递增。rn
作为名称完全是任意的,意味着是一个稍后删除的一次性名称)