我有两个'data.frame's
:df1
有2000行(ID)和100列,其值与df2
中的列名相匹配。 df2
有50行名为q1
到q50
,11列名为1到11。
df1
中的每两列对应df2
中的一行。 df1
中的第1列和第2列对应q1
中的行df2
,第3列和第4列对应于行q2
,依此类推。请在此处查看数据框的示例:df1 df2。
我想创建第三个数据框架,其尺寸与df1
相同。此框架df3
中的值应将d1
中的列名替换为df2
中相应的q行的列值。
以下是基于提供的df1和df2的示例df3:df3
我怎样才能做到这一点?
答案 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)
})))