【问题标题】:Reading and using values in a data.frame with values another data.frame,respectively读取和使用 data.frame 中的值与另一个 data.frame 的值,分别
【发布时间】:2018-04-20 00:52:49
【问题描述】:

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

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

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

我怎样才能做到这一点?

【问题讨论】:

标签: r dataframe replace


【解决方案1】:

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

# 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)
                                      })))

【讨论】:

  • 感谢您的指导、支持和与我分享您的智慧。你完全理解我的问题,你的程序非常好。但是,当它为我的数据运行时,某些列会填充一个新数字。太奇怪了。例如:在 df3 中,列或行中有新的数字(30、20、2、3 ...),它们不在 df1 或 df2 中。这些新数字不会分配给特殊的列或行。它们非常零星,并且另一列或行是正确的。这是我的问题。
  • 如果没有完整的数据集,几乎不可能诊断出导致该问题的原因。如果您可以提供完整的数据集或至少提供您知道存在问题的部分数据,我可能会提供更多帮助。
  • Matt Jewett 感谢您的快速回复。您的代码是正确的,完全正确。这正是我所需要的。我知道我的真实数据(df2)中的一个数字是错误的,我纠正了它。再次感谢。
猜你喜欢
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多