【问题标题】:Finding variance of columns from 2 dataframes从 2 个数据帧中查找列的方差
【发布时间】:2017-08-22 17:26:51
【问题描述】:

我有 2 个数据框

数据帧 A 和数据帧 B。

   A <- data.frame(a=c(1,2,3,4,5),b=c(2,4,6,8,10),c=c(3,6,9,12,15),x=c(4,8,12,16,20),y=c(5,10,15,20,25))

 B <- data.frame(a=c(1,2,3,4,5),b=c(2,4,6,8,10),c=c(3,6,9,12,15),x=c(4,8,12,16,20),y=c(5,10,15,20,25))

          A
      a   b   c   x   y
      1   2   3   4   5
      2   4   6   8  10
      3   6   9  12  15
      4   8  12  16  20
      5  10  15  20  25

          B
     a   b   c   x   y
     1   2   3   4   5
     2   4   6   8  10
     3   6   9  12  15
     4   8  12  16  20
     5  10  15  20  25

预期输出:

  C
  a   b   c   x   y
  1   0   0   0   0
  2   0   0   0   0
  3   0   0   0   0
  4   0   0   0   0
  5   0   0   0   0

两者都有一个由字母数字组成的键列。

两个数据框都有 260 列,其中 250 列是浮点数。

是否有更简单的方法可以轻松计算 250 列中每一列的方差并将方差存储在另一个数据框中?

【问题讨论】:

  • 您可以在将数据集放入listlibrary(matrixStats);lapply(list(A, B), function(x) colVars(as.matrix(x[-1]))) 后尝试colVars,我假设第一列为“id”列
  • 非常感谢。我可以在 x 中指定一系列列是否正确?如果我的数据框有 10 个不需要比较的字符列?
  • 数据框A与数据框B有什么关系?如果要独立计算方差,为什么要同时列出它们?
  • 你可以有x[c("b", "c")]
  • 似乎该方法对值求和并计算差异。我已经更新了预期的输出。我正在寻找每个单独列的差异。谢谢!

标签: r


【解决方案1】:

我认为您希望两个数据帧的各个列之间存在差异

temp = names(A)
data.frame(A["a"], do.call(cbind, lapply(temp[!temp %in% "a"], function(x) A[x] - B[x])))
#  a b c x y
#1 1 0 0 0 0
#2 2 0 0 0 0
#3 3 0 0 0 0
#4 4 0 0 0 0
#5 5 0 0 0 0

【讨论】:

  • 好的,谢谢。这行得通。我可以在那里给出一系列列,而不是只排除“a”吗?
  • 或者如果您只想选择数字列 A[,which(sapply(A,class) == "numeric")]
  • @Bee 如果这回答了您的问题,请考虑投票并接受它作为答案。请看What should I do when someone answers my question?
【解决方案2】:

我们可以使用Map/mapply来查找'A'和'B'对应列之间的差异

cbind(A[1], mapply(`-`, A[-1], B[names(A)[-1]]))
#  a b c x y
#1 1 0 0 0 0
#2 2 0 0 0 0
#3 3 0 0 0 0
#4 4 0 0 0 0
#5 5 0 0 0 0

或者只是

cbind(A[1], A[-1] - B[-1])

【讨论】:

  • 谢谢。 cbind 不合并所有数据集吗?如何仅将键列的差异写入数据框?
  • @Bee 使用var计算方差,而使用-diff计算差异
  • 是的,谢谢,差异就是我的意思。如果我只在单独的数据框中写入差异,我将如何从 cbind(A[1], A[-1] - B[-1]) 中提取它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 2021-11-22
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2019-06-19
  • 1970-01-01
相关资源
最近更新 更多