【问题标题】:How to copy from one data frame to other (empty) data frame [duplicate]如何从一个数据框复制到另一个(空)数据框[重复]
【发布时间】:2020-05-19 06:55:34
【问题描述】:

抱歉这个非常基本的问题: 我有一个包含 500 多列的空数据框,其中必须复制来自另一个数据框的选定数据。

这是我的例子:

dest<-read.table(text='PID  DEMOGID GENDER AGEINYEARS LVSF RVSF', header=TRUE)

source<-read.table(text = '
     INTERNALID SEX 
1     147    "M" 
2     150    "F" 
3     144    "M" 
4     149    "F" ', header = TRUE)

复制数据后,我的dest数据框应该是这样的:

dest
PID        DEMOGID    GENDER     AGEINYEARS LVSF       RVSF   
147        NA         M          NA         NA         NA
150        NA         F          NA         NA         NA
144        NA         M          NA         NA         NA
149        NA         M          NA         NA         NA

提前致谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    看起来您可以重命名dest 中的列。或者您可以执行加入/合并,例如,使用 dplyr 包如下:

    dest <- read.table(text='PID  DEMOGID GENDER AGEINYEARS LVSF RVSF', header=TRUE,
                       colClasses = c(PID = "integer", GENDER = "character"))
    
    source<-read.table(text = '
         INTERNALID SEX 
    1     147    "M" 
    2     150    "F" 
    3     144    "M" 
    4     149    "F" ', header = TRUE)
    
    library("dplyr")
    
    right_join(dest, source, by = c(PID = "INTERNALID", GENDER = "SEX"))
    #>   PID DEMOGID GENDER AGEINYEARS LVSF RVSF
    #> 1 147      NA      M         NA   NA   NA
    #> 2 150      NA      F         NA   NA   NA
    #> 3 144      NA      M         NA   NA   NA
    #> 4 149      NA      F         NA   NA   NA
    

    请注意,dplyr 要求要合并的列的类型相同。这就是为什么我使用colClasses 来阅读dest

    【讨论】:

      【解决方案2】:

      你可以merge这两个数据框。

      merge(dest, source, by.y = c('INTERNALID', 'SEX'), 
                          by.x = c('PID', 'GENDER'), all.y = TRUE)
      
      #  PID GENDER DEMOGID AGEINYEARS LVSF RVSF
      #1 144      M      NA         NA   NA   NA
      #2 147      M      NA         NA   NA   NA
      #3 149      F      NA         NA   NA   NA
      #4 150      F      NA         NA   NA   NA
      

      【讨论】:

      • 我欺骗了 cbind.fill 但现在我明白了,这不是经典合并的欺骗吗?
      • 我认为这个问题并不是真正的骗局(尽管看着答案我们可能会觉得:P),因为可能有多种方法可以解决它。 merge 是一种方法,但我认为这也可以通过 cbind 和喜欢来解决。
      猜你喜欢
      • 1970-01-01
      • 2019-09-28
      • 2020-10-18
      • 2018-08-03
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 2019-10-20
      • 2018-03-29
      相关资源
      最近更新 更多