你好,
我对 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 程序可能会更容易。