首页 文章

读取和使用data.frame中的值,分别使用另一个data.frame值

提问于
浏览
-2

我有两个 'data.frame'sdf1 有2000行(ID)和100列,其值与 df2 中的列名相匹配 . df2 有50行,名为 q1q50 ,11列名为1到11 .

df1 中的每两列对应 df2 中的一行 . df1 中的第1列和第2列对应于 df2 中的行 q1 ,第3列和第4列对应于行 q2 ,依此类推 . 请在此处查看数据框的示例:df1 df2 .

我想创建第三个data.frame,其尺寸与 df1 相同 . 此框架中的值 df3 应将 d1 中的列名替换为 df2 中相应的q行的列值 . 这是一个基于提供的df1和df2的示例df3:df3

我怎样才能做到这一点?

1 回答

  • 0

    可能不是最有效的方法,但应该得到你想要的结果 .

    # Create df1 for testing
    df1 <- data.frame("1" = c(5,1),
                      "2" = c(1,4),
                      "3" = c(1,2),
                      "4" = c(2,1),
                      "5" = c(1,1),
                      "6" = c(1,1),
                      "7" = c(2,2),
                      "8" = c(2,2))
    
    colnames(df1) <- c(1:8)
    
    # Create df2 for testing
    df2 <- data.frame("1" = c(-.02635,-.00849,-.00039,.043179,.009653),
                      "2" = c(.027682,.007413,-.00003,-.00406,-.00194),
                      "3" = c(.030295,.010292,-.06765,-.04161,NA),
                      "4" = c(.023239,.031153,.137365,-.03764,NA),
                      "5" = c(.043868,NA,-.08496,-.0377,NA),
                      "6" = c(.045689,NA,NA,-.03547,NA))
    
    colnames(df2) <- c(1:6)
    row.names(df2) <- paste0("q",row.names(df2))
    
    
    # Create df3 from df1 and df2
    df3 <- as.data.frame(t(apply(df1, 1, function(x){
                                          q <- 1
                                          iter <- 1
                                          vals <- numeric()
                                            for(i in x){
                                              vals <- append(vals, ifelse(is.null(df2[paste0('q',q),i]), NA, df2[paste0('q',q),i]))
                                              q <- ifelse(iter %% 2 == 0, q + 1, q)
                                              iter <- iter + 1
                                            }
                                          return(vals)
                                          })))
    

相关问题