获取数据子集的平均值你好,
我在三个不同时间点(0、1、3 小时)在一定波长范围(400 - 600 nm)内采集了 4 个处理过的样品和 5 个未处理过的样品的强度。
从长远来看,我正在尝试标准化我的数据,以便未经处理的样品在 400nm 处的平均强度在每个时间点都是 1。 为了做到这一点,我需要弄清楚如何获得 0、1、3 小时的平均未处理 400nm 强度。
这是我当前的代码:
Col Mean(
:Intensity,
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
)
从我制作的图表(和 Excel 数据透视表)中,我知道 1 小时的值应该约为 0.72,但大多数行得到的值为 1.3。 对于满足我的 3 个“和”语句的行,我也得到 0.68,但我知道 Excel 数据透视表有时会做有趣的标准化事情,所以我不确定我是否担心那里的差异。
任何使我的代码保持一致的建议将不胜感激。
回复:获取数据子集的平均值没关系 :)
列平均值(:身高,:年龄)
谢谢
回复:获取数据子集的平均值吉姆,
如何让示例列仅保存该行中人员年龄的列平均值?
例如,在示例数据中,Katie 12 岁,我希望她的示例列包含仅 12 岁孩子的列平均身高,而对于 13 岁的爱丽丝,我希望她的示例列包含列平均值13岁的身高。
我希望有一种比对每个年龄段使用嵌套 if 更简单的方法。
谢谢你,
标记
回复:获取数据子集的平均值我最终使用了你的第二个选项,但我仍然必须手动输入标准化因子进行计算...... 我的最终代码如下所示:
If( :Time == 0,
:Intensity / 1.11175075,
If( :Time == 1,
:Intensity / 0.772546829268293,
If( :Time == 3,
:Intensity / 1.2335052,
"Error"
)
)
回复:获取数据子集的平均值这种方法可行,但将特定值(有点像在 Excel 中使用 $$)应用于我认为属于同一类型的所有行并不容易。
我认为这只是软件上的差异,我必须习惯这些差异。
回复:获取数据子集的平均值也许这是显而易见的,但它似乎比您刚才概述的更简单。使用您的示例,我使用公式 Col Mean( :Intensity, :Time period, :Treatment, :Wavelength ) 创建了一个新列。如果我可以避免它们,我不会使用脚本,并且可以在这里避免它们。Col Mean 函数(在统计组中)允许将平均值计算为多个分组变量的函数,这将准确生成您显示的表格。
回复:获取数据子集的平均值你好,
如果我正确理解您的问题,您要求通过一个或多个分组列计算特定列的平均统计量。
在随附的示例数据表中,我保存了两个脚本来说明如何使用两种不同的方法来执行此操作。 标题为“Trt、时间段和波长的平均值”的文章创建了一个带有本地数据过滤器的数据透视表,以便您可以查看不同时间段、处理和波长的平均强度。 可以有条件地应用本地数据过滤器(通过使用红色小三角选项下的“有条件”),以便在选择类别时将下一列过滤器的类别限制为仅属于所选类别的类别。
Tabulate (pivot table) with local data filterTabulate (pivot table) with local data filter使用本地数据过滤器制表(数据透视表)
标题为“表格摘要”的第二个脚本是使用表格-->摘要以及治疗、时间段和波长作为分组列的示例。
Tables Summary Dialog with Group ColumnsTables Summary Dialog with Group Columns带有组列的表格摘要对话框
对于其他想要了解如何使用脚本执行数据透视表的人。
Tabulate(
Show Control Panel( 0 ),
Set Format( Mean( :Intensity( 12, 1 ) ) ),
Add Table(
Row Table(
Grouping Columns( :Time Period, :Treatment, :Wavelength ),
Analysis Columns( :Intensity ),
Statistics( Mean )
)
),
Local Data Filter(
Add Filter(
columns( :Wavelength, :Time Period, :Treatment ),
Where( :Time Period == "0" ),
Display( :Treatment, Size( 309, 232 ), List Display )
)
)
)
最后,Tables-->Summary 以及相应的 JSL:
Data Table( "Getting an average of a subset of data.jmp" ) <<
Summary(
Group( :Time Period, :Treatment, :Wavelength ),
Mean( :Intensity ),
Freq( "None" ),
Weight( "None" )
)
这是否更符合您的预期?
最好的,
斯坦
回复:获取数据子集的平均值我确信我不会完全详细地遵循您需要设置的不同条件才能使这项工作成功,但是,我整理了一个示例,我相信它将说明生成答案的方法你需要。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "Example",
formula(
If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13,
Col Mean( If( :sex == "F" & :age == 12 | :sex == "M" & :age == 13, :height, . ) ),
.
)
)
);
看一下公式。 它使用了两个不同的决策来获得响应。 首先,只有那些满足性别和年龄特定组合的行才应计算平均值。 如果不满足这些细节,则该值应该是缺失值。 当第一个决策正确时执行第二个决策,然后,我们要计算列平均值,但仅包括性别和年龄组合的特定值为真的值。
回复:获取数据子集的平均值不,这根本不是我所期待的。
我只是想使用所有的强度来获取强度的平均值
值,其中时间为 1 小时,波长为 400,并且没有
处理(I@1,400,N)。 我将在 0 和 3 小时内做同样的事情(I@ 0, 400,N 和
我@3, 400,N)
我最终将制作一个公式,使用 if 语句来检查时间
对于该行,然后将该行的强度除以时间
适当的“I@”值。
大致:
如果 t = 0,则 I/I@0,400,n
否则如果 t= 1, I/I@1,400,n
否则如果 t = 3, I/I@3,400,n
否则错误
我希望这能更好地解释我正在尝试做的事情。
回复:获取数据子集的平均值我不确定您是否正在解释您的代码实际上在做什么。 Col Mean() 函数中的第二个元素是“By”语句。 也就是说,按照您的编码方式,它将计算满足以下条件的所有 rews 的强度平均值:
:Time == 1 & :Wavelength( nm ) == 400 & :Treat == "No"
对于不满足该条件的所有行,它将计算所有这些行的强度平均值。 因此,当应用该公式时,它只能生成两个不同值之一。 这是你所期待的吗?