【问题标题】:Calculate ratios of all column combinations from a dataframe计算数据框中所有列组合的比率
【发布时间】:2020-03-10 20:36:56
【问题描述】:

我有一个 CVS 文件作为 R 中的 df 导入。这个 df 的尺寸是 18x11。我想计算列之间所有可能的比率。你们能帮我解决这个问题吗?我知道“for循环”或矢量化函数都可以完成这项工作。行名将保持不变,而列名组合可以使用粘贴进行合并。但是,我不知道如何执行此操作。我在excel,因为它仍然是一个较小的数据集。较大的尺寸会使其在 excel 中变得乏味且容易出错,因此,我想在 R 中尝试。

确实会有很大帮助。谢谢。假设下面是作为我数据子集的数据框。

dfn = data.frame(replicate(18,sample(100:1000,15,rep=TRUE)))

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我试过跟随,它有效,但如果有其他解决方案,请告诉我。
  • rdfn = do.call(cbind,lapply(1:ncol(dfn[]),function(x) { DF = data.frame(dfn[,]/dfn[,][,x ] ); colnames(DF)=paste0(colnames(dfn[,]),"/",colnames(dfn[,])[x]); return(DF)}))
  • @Dharmesh 你需要其他格式吗?
  • 您下面的代码将完成这项工作。我只是想有一个结构上不那么复杂的替代方案。我正在尝试学习如何为我的数据分析工作有效地编码。谢谢。

标签: r function


【解决方案1】:

如果你这样做:

do.call("cbind", lapply(seq_along(dfn), function(y) apply(dfn, 2, function(x) dfn[[y]]/x)))

您将得到一个 15 * 324 的数组,其中 18 列代表所有列除以第一列,18 列除以第二列,依此类推。

您可以通过使用以下名称标记列来跟踪它们:

apply(expand.grid(names(dfn), names(dfn)), 1, paste, collapse = " / ")

【讨论】:

  • 非常感谢。比我在上面评论中发布的要干净得多。
  • 更新:嘿艾伦,第二个代码得到的名字有点不正确,因为“分子显示为分母”和“分母显示为分子”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多