獲取數據子集的平均值你好,
我在三個不同時間點(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"
對於不滿足該條件的所有行,它將計算所有這些行的強度平均值。 因此,當應用該公式時,它只能生成兩個不同值之一。 這是你所期待的嗎?