将R中的数据集重新格式化为不同的空数据集



我有两个数据集。其中一个包含需要为内部系统重新格式化的内部数据

Internal Name 1  Internal Name 2 Internal Name 3
1234            abcd            testing
4567            efgh            testing 
78910           ijkl            123

第二个数据集为空,只有列名。这是格式模板

Customer Name    Reference Number

基本上,我需要将内部数据中的数据复制到格式模板中。一些列是不需要的,并且列的顺序是不同的;内部名称1";转到";参考号";

Customer Name     Reference Number
abcd               1234
efgh               4567
ijkl               78910   

我可以重命名列并删除不需要的列,但列的命名方式和顺序对内部系统很重要,所以我觉得以某种方式将数据复制到格式数据集中会更容易

我尝试过做一个简单的数据$Customer Name=internaldata$Internal Name 1,但我得到了一个行数不匹配的错误。每周收到的行数会有所不同,所以我不能只将其设置为特定值

我想如果你有一个像这样的空模板数据帧:

template <- data.frame('Customer Name' = character(), 
'Reference Number' = character(),
check.names = FALSE)

还有一个问题中数据帧的可复制示例:

dat <- data.frame(`Internal Name 1` = c("1234", "4567", "78910"), 
`Internal Name 2` = c("abcd", "efgh", "ijkl"), 
`Internal Name 3` = c("testing", "testing", "123"),
check.names = FALSE)

然后你可以做以下操作:

library(dplyr)
full_join(template, dat, 
by = c('Customer Name' = 'Internal Name 2',
'Reference Number' = 'Internal Name 1')) %>%
select(`Customer Name`, `Reference Number`)
#>   Customer Name Reference Number
#> 1          abcd             1234
#> 2          efgh             4567
#> 3          ijkl            78910

如果将结果存储为template,则使用新的dat运行相同的代码将向现有数据添加任何新的客户信息。

您可以match接收到内部名称为2的客户,该名称为内部数据帧中的行号。实际上不需要一个空模板。如果新名称未在内部记录,则会得到NA

## customers in arbitrary number and order
received <- c("ijkl", "abcd", "efgh", "ijkl", "abcd", "efgh", 'nomatch')  
newdat <- data.frame(Customer.Name=received, 
Reference.Number=with(intern, Internal.Name.1[match(received, Internal.Name.2)]))
newdat
#   Customer.Name Reference.Number
# 1          ijkl            78910
# 2          abcd             1234
# 3          efgh             4567
# 4          ijkl            78910
# 5          abcd             1234
# 6          efgh             4567
# 7       nomatch               NA

相关内容

  • 没有找到相关文章

最新更新