【问题标题】:R using a lookup tableR使用查找表
【发布时间】:2012-09-21 21:57:59
【问题描述】:

我正在尝试找出一种优雅的方式来执行以下操作:

我有两个数据框:

multipFactors:

structure(list(Library = c("FT259", "EL259", "FT261", "EL261", 
"FT325", "EL325"), Vol = c(2.5, 1, 2.5, 1, 2.5, 1), Dfactor = c(5000L, 
1000L, 5000L, 1000L, 5000L, 1000L)), .Names = c("Library", "Vol", 
"Dfactor"), row.names = c(NA, 6L), class = "data.frame")

concvals

structure(list(FT265 = c(1.87143067658684, 6.42164423157045, 
3.2067011263946, 38.6127973672561, 31.413779293588, 35.5528208255031
), EL265 = c(17.1144442552411, 17.3273656558687, 14.7909715401529, 
NaN, NaN, NaN), FT325 = c(35.3550952814249, 37.9458212939415, 
29.8197141318635, 35.1760971346751, 36.7065424286613, 42.9943003679566
), wellid = structure(c("A1", "B1", "C1", "D1", "E1", "F1"), .Dim = c(6L, 
1L))), .Names = c("FT265", "EL265", "FT325", "wellid"), row.names = c(NA, 
6L), class = "data.frame")

我正在尝试根据concvals 的列名从multipFactors 中选择正确的Dfactor,并将concvals['FT325'] 乘以适当的Dfactor。乘法既可以在原地完成,也可以在新的数据框中完成,我不介意。

有没有一种“R”方式来做这样的事情,或者它会是一个循环的机会?

抱歉 -- 仅看示例,DFactor 不是 R 意义上的因子,它是稀释因子的缩写,因此实际上是一个数字。在此示例中,看起来只有两个稀释因子(5000、1000),但可能还有其他稀释因子。抱歉,不清楚。

谢谢 H

【问题讨论】:

  • 数据集有多大?行?每个变量的水平数?
  • 有 24 个板,因此 multipFactors 中有 24 行,concvals 和 wellID 列中有 24 列。
  • 我可能只是melt concvals 然后merge 这两个。

标签: r dataframe lookup-tables


【解决方案1】:

这应该可行:

mapply("*", concvals[multipFactors$Library], multipFactors$Dfactor)

【讨论】:

  • 谢谢!喜欢这个解决方案。我没有足够的积分来投票,但我会的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多