首页 > 解决方案 > 数据框取两列并根据值采取行动

问题描述

我有一个包含两列 fk (foreign_key) 和 fk_1 的数据框。在数据集中,它们都被称为 fk。

我想摆脱 fk_1 以便只有 1 列带有 fk。fk 可以包含一个数字,一个#-hashcode,fk_1 也可以。

现在我只想保留数字,但如果 fk 和 fk_1 有数字。我想创建一个采用 fk_1 值的新条目,因此旧条目可以采用 fk 值

例子:

FK        FK-1     Name Expected Result
1         #abc07zy Test  1
#abc2Z90  2        Beta  2
3         4        Alpha 3 and a new entry with value 4

所以总列表看起来像:

FK  Name
1   Test
2   Beta
3   Alpha
4   Alpha

我试图用ifelseand greplon做一些事情"#",但这只适用于一列。而且我不知道如何实现数字 3 和 4 将成为两个条目。

标签: r

解决方案


我们可以使用 合并列,使用FK获取列中的所有数字,并在单独的行中获取数据。FK_1unitestr_extract_all

library(dplyr)
library(tidyr)

df %>%
  unite(FK, FK, FK_1, sep = " ") %>%
  mutate(FK = stringr::str_extract_all(FK, '\\b\\d+\\b'))  %>%
  unnest(FK)


# A tibble: 4 x 2
#  FK    Name 
# <chr> <fct>
#1 1     Test 
#2 2     Beta 
#3 3     Alpha
#4 4     Alpha

推荐阅读