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

时间:2017-11-07 15:00:37

标签: r dataframe replace

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

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

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分: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)
                                      })))