【发布时间】:2013-11-20 12:51:01
【问题描述】:
我正在尝试在“ddply”中使用自定义函数,以便根据预先存在的变量 (CelltiterGLO) 的值在我的数据框中创建一个新变量 (NormViability)。 该函数旨在根据变量 'Concentration_nM' (0.01) 的特定子级别的平均 'CelltiterGLO' 值创建重新缩放 (%) 的 'CelltiterGLO' 值。 因此,如果 'Concentration_nM'==0.01 处的 'CelltiterGLO' 的平均值设置为 100,我想在其他变量('CTSC'、'Time_h' 和 'ExpType')的水平上重新调整 'CelltiterGLO' 的所有其他值.
归一化函数如下:
normalize.fun = function(CelltiterGLO) {
idx = Concentration_nM==0.01
jnk = mean(CelltiterGLO[idx], na.rm = T)
out = 100*(CelltiterGLO/jnk)
return(out)
}
这是我尝试应用于我的数据框的代码:
library("plyr")
df.bis=ddply(df,
.(CTSC, Time_h, ExpType),
transform,
NormViability = normalize.fun(CelltiterGLO))
代码运行,但是当我尝试仔细检查(聚合或点击)时,如果在 'Concentration_nM'==0.01 时,'NormViability' 的平均值等于 '100',我得到的不是 100,而是不同的数字。事实是,如果我尝试通过变量“ExpType”的两个级别对我的 df 进行子集化,则代码会在每个分离的子集上返回正确的数字。我试图使“ExpType”成为字符或因子,但得到了类似的结果。 'ExpType 有两个级别/值,分别是“组合”和“剂量响应”。我不知道为什么代码不能在整个 df 上运行,我想知道这是否是因为“ExpType”的两个级别不包含所有其他变量的相同级别数,例如“ExpType”的“组合”级别缺少“Time_h”级别之一。
非常感谢您的帮助,如果 Stackoverflow 中已经存在答案但我无法找到,我提前道歉。
米歇尔
【问题讨论】:
-
我想你只需要删除 "NormViability=" 。查看
?ddply下的示例 -
非常感谢,我尝试删除“NormViability=”,但在新数据框中没有新变量。我试图将新变量重命名为没有大写字母的较短名称,但没有奏效。相同的代码在分组变量较少的类似数据集中工作。