你好,
我對 R 不熟悉,一直在使用 JMP(還是初學者)。我有 R 代碼需要轉換為 JMP 腳本。我打電話給 JMP,他們建議我在這裡發帖,看看是否有人可以幫助我?
R代碼包含在這裡abcd_discrimination/demographics_baseline_clean.R at main · barzilab1/abcd_discrimination · GitHub
我在 JMP 中有數據表,只是不知道如何轉換腳本。
有人可以幫忙嗎?
我附上了txt文件
預先感謝您的幫助。
我還應該注意到,社區的另一位用戶聯繫我並嘗試運行 R 代碼,但出現了一些錯誤;注意到“按原樣”編寫的 R 腳本的可能根本原因與實用程序文件中過時的路徑設置有關。
@GraphicalScore9我建議您聯繫 GIT 存儲庫的所有者,或者查看 csv 文件是否已存在。不幸的是,R 代碼停止工作的情況並不少見(這是開源軟件的問題之一,而 JMP 或 SAS 則沒有)。
這些步驟中發生的是數據清理。 “demographics_set”是一個類似於JMP數據表的數據表。
R 使用約定:人口統計集[行,列]。 因此,當下面有以下行時,它會應用於所有行,因為逗號左側的括號內沒有任何內容。 對於“sex_br”列,它為“F”分配值 1,為“M”分配值 0(以及任何非“F”的值)。 邏輯是 (sex == "F") 在 TRUE 時返回 1,在 FALSE 時返回 0。 “:=”是左賦值運算符(中綴)。 R 一開始可能無法識別該運算符,因此您可能需要在其餘代碼之前運行以下行: `:=` <- `<-`。 這會將更典型的賦值運算符(“<-”)分配給“:=”。
demographics_set[, sex_br := (sex == "F")*1]
這是另一個例子,下面有行子集。 對於“demo_ethn_v2”等於“1”的行,將值 1 分配給“ethnicity_hisp”列。
demographics_set[demo_ethn_v2 == "1", ethnicity_hisp := 1]
is.na() 函數選擇括號內的列不為 NA 的行。
as.character() 和 as.numeric() 函數將列轉換為所述字符或數字。 有時您需要先轉換為字符,然後再轉換為數字,因此代碼中會出現嵌套函數。
完成所有這些數據清理後,以下行刪除由於數據框子集化而不再使用的因子級別。
demographics_set = droplevels(demographics_set)
也就是說,我同意其他人的觀點,因為將 R 代碼嵌入到 JMP 腳本中並使用 R 函數來運行 R 代碼可能會更容易。 查看“幫助”菜單下 JMP 中的腳本索引以查找 R 函數。 您可能需要 R Init() 來初始化與 R 的連接,R Send() 來包裝您想要輸入到 R 代碼中的任何文件或變量,R Submit() 來包裝您的 R 代碼,R Get( ) 將 R 的輸出檢索回 JMP(如果要檢索圖形對象,則使用 R Get Graphics()),並使用 R Term() 終止 R 界面。 聽起來比實際更複雜,但可能仍然比將所有 R 代碼重寫為 JSL(JMP 腳本語言)更容易。 腳本索引有一些很好的示例可以幫助您。
@GraphicalScore9 ,感謝您在這裡提出更具體的問題。一般來說,這可能會有所幫助: JMP to R 插件生成器 - JMP 用戶社區。
@tx尼爾森,這是你能幫忙的嗎?對於非腳本編寫者來說,公式編輯器中的可編寫腳本的邏輯在 JMP 中很容易理解 - 似乎用戶在這裡需要的是從此處的 R 源代碼創建這些新變量名稱的邏輯的一些基本解釋 - 然後從那裡,如果他們是熟悉列公式(在腳本編輯器或公式編輯器中)的 JMP 用戶,那麼在 JMP 數據表環境中實施應該非常簡單。
大家好,我正在努力讓我的詢問更加具體並以 JMP 為重點。 根據隨附數據生成的以下 R 代碼,有人可以向我解釋 R 在從原始數據創建這些新變量時所做的邏輯嗎? 我打算使用列公式在 JMP 中的原始數據上重現這些新變量。具體來說,所附 R 代碼的第 23 行到第 114 行: abcd_discrimination/demographics_baseline_clean.R at main · barzilab1/abcd_discrimination · GitHub
########### sex
#convert the NIH sex at birth (equal to demo_sex_v2)
demographics_set[, sex_br := (sex == "F")*1]
demographics_set[,demo_sex_v2 := NULL]
########### age
#interview age will be used instead of age
demographics_set[,demo_brthdat_v2:=NULL]
demographics_set[, age := as.numeric(as.character(interview_age))]
########### gender
demographics_set[,gender := as.numeric(as.character(demo_gender_id_v2))]
demographics_set[(gender %in% c(777,999)) ,gender := NA]
demographics_set[, gender:= gender-1]
demographics_set[, demo_gender_id_v2:= NULL]
########### ethnicity
demographics_set[demo_ethn_v2 == "1", ethnicity_hisp := 1]
demographics_set[demo_ethn_v2 == "2", ethnicity_hisp := 0]
demographics_set[(demo_ethn_v2 %in% c(777,999)), ethnicity_hisp:= NA]
demographics_set = demographics_set[, demo_ethn_v2 := NULL]
########### child race
#"refuse to answer" and "dont know" will be 0
# White
demographics_set[, race_white:= (demo_race_a_p___10 == "1")*1 ]
# Black
demographics_set[, race_black:= (demo_race_a_p___11 == "1")*1 ]
# Asian
demographics_set[, race_asian:= 0]
demographics_set[ (demo_race_a_p___18 == "1" | demo_race_a_p___19 == "1" | demo_race_a_p___20 == "1" |
demo_race_a_p___21 == "1" | demo_race_a_p___22 == "1" | demo_race_a_p___23 == "1" |
demo_race_a_p___24 =="1"), race_asian:= 1 ]
# AIAN: American Indian and Alaska Native
demographics_set[, race_aian:= 0]
demographics_set[ (demo_race_a_p___12 == "1" | demo_race_a_p___13 == "1"), race_aian:=1 ]
#NHPI: Native Hawaiian and Other Pacific
demographics_set[, race_nhpi:= 0]
demographics_set[ demo_race_a_p___14 == "1" | demo_race_a_p___15 == "1" | demo_race_a_p___16 == "1" |
demo_race_a_p___17 == "1", race_nhpi:= 1 ]
# Other
demographics_set[, race_other:= 0 ]
demographics_set[ demo_race_a_p___25 == "1", race_other:= 1 ]
# Mixed
demographics_set[, race_mixed:= (race_white + race_black + race_asian + race_aian + race_nhpi + race_other)]
demographics_set[, table(race_mixed, useNA = "if")]
demographics_set[ race_mixed <= 1, race_mixed:= 0]
demographics_set[ race_mixed > 1, race_mixed:= 1]
demographics_set[, table(race_mixed, useNA = "if")]
demographics_set[,colnames(demographics_set)[(grepl("^demo_race_a_p___",colnames(demographics_set)))] := NULL]
########### child's country of birth
demographics_set[, born_in_usa := 0]
demographics_set[demo_origin_v2 %in% c(777,999), born_in_usa := NA]
demographics_set[demo_origin_v2 == 189, born_in_usa := 1]
########### parents education
demographics_set[(demo_prnt_ed_v2 %in% c(777,999)), demo_prnt_ed_v2:= NA]
demographics_set[(demo_prtnr_ed_v2 %in% c(777,999)), demo_prtnr_ed_v2:= NA]
demographics_set[, parents_avg_edu:= (as.numeric(as.character(demo_prnt_ed_v2)) + as.numeric(as.character(demo_prtnr_ed_v2)))/2]
#in case of edu is missing in one of the parents, it will be the edu the of other parent
demographics_set[is.na(parents_avg_edu), parents_avg_edu:= as.numeric(as.character(demo_prnt_ed_v2))]
demographics_set[is.na(parents_avg_edu), parents_avg_edu:= as.numeric(as.character(demo_prtnr_ed_v2))]
########### family income
demographics_set[,household_income:= demo_comb_income_v2]
demographics_set[( household_income %in% c(777,999)) ,household_income:= NA]
demographics_set[,demo_comb_income_v2 := NULL]
########### parents married status
demographics_set[demo_prnt_marital_v2 == 777 , demo_prnt_marital_v2:= NA]
demographics_set[,separated_or_divorced := 0]
demographics_set[(demo_prnt_marital_v2 %in% c(3,4)), separated_or_divorced := 1]
demographics_set[,parents_married := 0]
demographics_set[(demo_prnt_marital_v2 == 1), parents_married := 1]
demographics_set = droplevels(demographics_set)
使用 JMP 作為前端並從 JSL(JMP 腳本語言)調用現有的 R 程序可能會更容易。