r - 根据变量的值将值从一个数据帧移动到另一个数据帧

标签 r merge reshape

不熟悉 R,我遇到了以下问题:我想将数据帧 mlpa 中的值 probeposition 添加到数据帧 patientsprobeposition 的值由 mlpapatients 中存在的值链接(即 probepatprobe)。据我所知,通常的数据管理教程并未涵盖此问题。

#mlpa:
probe <- c(12,15,18,19)
probeposition <- c(100,1200,500,900)
mlpa = data.frame(probe = probe, probeposition = probeposition)
#patients:
patid <- c('AT', 'GA', 'TT', 'AG', 'GG', 'TA')
patprobe <- c(12, 12, NA, NA, 18, 19)
patients = data.frame(patid = patid, patprobe = patprobe)

#And that's what I finally want:
patprobeposition = c(100, 100, NA, NA, 500, 900)  
patients$patprobeposition = patprobeposition

更新

根据 Andrie 的回复,我意识到我不得不提到患者数据集中有几个“探针”,所以实际上数据看起来更像这样(实际上,不仅会有 probe1 和探针 2,但探针 1-探针 4):

mlpa <- data.frame(probe = c(12,15,18,19),
                   probeposition = c(100,1200,500,900) ) 
patients <- data.frame(patid = c('AT', 'GA', 'TT', 'AG', 'GG', 'TA'),
                       probe1 = c(12, 12, NA, NA, 18, 19), 
                       probe2 = c(15, 15, NA, NA, 19, 19) )

我想要的是:

patients <- data.frame(patid = c('AT', 'GA', 'TT', 'AG', 'GG', 'TA'),   
                       probe1 = c(12, 12, NA, NA, 18, 19), 
                       probe2 = c(15, 15, NA, NA, 19, 19), 
                       position1 = c(100, 100, NA, NA, 500, 900), 
                       position2 = c(1200, 1200, NA, NA, 900, 900)) 

最佳答案

您可以使用 merge 非常轻松地做到这一点,它采用两个数据框并将它们连接到公共(public)列或行名称上。

merge 工作的最简单方法是确保您有匹配的列名称,其中这些列引用相同的信息。具体来说,我已将您的列 patprobe 重命名为 probe:

mlpa <- data.frame(
  probe = c(12,15,18,19),
  probeposition = c(100,1200,500,900)
)

patients <- data.frame(
  patid = c('AT', 'GA', 'TT', 'AG', 'GG', 'TA'),
  probe = c(12, 12, NA, NA, 18, 19)
)

现在您可以调用merge。但是,请注意 merge 的默认值仅返回匹配的行(在数据库术语中,这是一个 inner join)。您想要的是包括 patients 中的所有 行(左外连接)。您可以通过指定 all.x=TRUE 来做到这一点:

merge(patients, mlpa, all.x=TRUE, sort=FALSE)

  probe patid probeposition
1    12    AT           100
2    12    GA           100
3    18    GG           500
4    19    TA           900
5    NA    TT            NA
6    NA    AG            NA

关于r - 根据变量的值将值从一个数据帧移动到另一个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10408864/

相关文章:

r - 使dcast中的drop参数仅查看公式的RHS

r - R中的highchart内部循环

r - 有没有办法去除用 geom_sf_text 制作的标签周围的边框?

python - python 中的 Pandas 数据框 : Removing rows from df1 based on rows in df2

r - data.table 中的 reshape 难题

python - 基于索引的numpy reshape

R - ggplot geom_dotplot 形状选项

r - 在R包中显示编号列表

python - "Index Match"Excel 中的功能未在 pandas Merge 中捕获(或者是?)

javascript - 在 jQuery 中合并 3 个函数