首页 > 解决方案 > 使用新的和现有的字段将数据从一个数据帧映射到另一个数据帧

问题描述

在 RI 中需要创建一个新的数据帧 (DF3) 并从两个现有数据帧(DF1 和 DF2)映射一些数据。一些映射字段将是全新的,一些映射字段将以相同的名称存在,而一些字段将以不同的名称存在。基本框架是这样的:

D1 = data.frame(
  "FieldA" = c("apple","banana","grapes","pear","orange"),
  "FieldB" = c(1,2,3,4,5),
  "FieldC" = c(5,4,2,3,1),
  "FieldD" = c(9,8,7,6,5))

D2 = data.frame(
  "FieldA" = c("bread","cereal","milk","oatmeal","smoothie"),
  "FieldB" = c(1,2,3,4,5),
  "FieldC" = c(5,4,2,3,1),
  "FieldX" = c(9,8,7,6,5),
  "FieldY" = c(3,4,5,6,7))

D3 = D1[,c("FieldA","FieldB")]

使用上面我可以将 DF1 字段映射到 DF3。但我不知道如何在映射我需要的三个 DF2 字段时引入 DF2 行:

DF3 的结果应该是总共 10 行数据,列字段为“FieldA”、“FieldB”、“FieldX”

标签: rdataframe

解决方案


我不确定这是否是您正在寻找的结果,但是这行代码将所需字段从新D1的. 通过连接 ( ) 来自原始数据帧的所需值,将这些值复制到新数据帧中。D2D3c(...)

D3 = data.frame("FieldA"=c(as.character(D1$FieldA), as.character(D2$FieldA)), "FieldB"=c(D1$FieldB, D2$FieldY), "FieldX"=c(rep(NA, nrow(D1)), D2$FieldX))

输出:
> D3 FieldA FieldB FieldX 1 apple 1 NA 2 banana 2 NA 3 grapes 3 NA 4 pear 4 NA 5 orange 5 NA 6 bread 3 9 7 cereal 4 8 8 milk 5 7 9 oatmeal 6 6 10 smoothie 7 5

as.character用于,FieldA因为否则这些值将被视为因子,D3然后包含一个引用因子水平的数字。有许多不同的方法可以处理这个问题。

我假设FieldX这就是您在问题中的意思。由于D1没有该字段,因此它NA接收D3.


推荐阅读