数据帧中的输出循环 Kolmogorov Smirnov 测试 (ks.test)
Output loop Kolmogorov Smirnov Test (ks.test) in dataframe
我想将循环中记录的 ks.test 的输出合并到数据框或文件中,而不是在控制台中打印 1155 测试的输出...:-)。
column_equality_stats = function(data, lab_stats1, lab_stats2, min_count=100) {
for(i in 1:length(lab_stats1)) {
lab_testcodes_1 = lab_stats1[i]
lab_testcodes_2 = lab_stats2[i]
equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']
if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){
stats <- ks.test(col1, col2)
print(stats)
}
}
}
我想要一个包含以下列的 data.frame:col1 和 col2 的名称(方程值)、p 值和 D 值。
Utopian data frame
非常感谢您!!
这是我能做到的。请编辑您的问题并添加一个可重现的示例。
我需要知道您的数据是如何定义的。我不能 运行 你的代码! :-)
无论如何,只需为每个 运行 循环创建一个数据框并将它们绑定在一起。
purrr 包的 map_dfr 为您完成。
library(purrr)
.column_equality_stats <- function(i, data, lab_stats1, lab_stats2, min_count = 100){
lab_testcodes_1 <- lab_stats1[i]
lab_testcodes_2 <- lab_stats2[i]
equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']
if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){
stats <- ks.test(col1, col2)
res <- data.frame(col1 = lab_testcodes_1,
col2 = lab_testcodes_2,,
pvalue = stats$p.value,
dvalue = stats$statistics)
} else {res <- data.frame()}
res
}
column_equality_stats <- function(data, lab_stats1, lab_stats2, min_count=100) {
map_dfr(seq_along(lab_stats1),
.column_equality_stats,
data = data,
lab_stats1 = lab_stats1,
lab_stats2 = lab_stats2,
min_count = min_count)
}
我想将循环中记录的 ks.test 的输出合并到数据框或文件中,而不是在控制台中打印 1155 测试的输出...:-)。
column_equality_stats = function(data, lab_stats1, lab_stats2, min_count=100) {
for(i in 1:length(lab_stats1)) {
lab_testcodes_1 = lab_stats1[i]
lab_testcodes_2 = lab_stats2[i]
equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']
if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){
stats <- ks.test(col1, col2)
print(stats)
}
}
}
我想要一个包含以下列的 data.frame:col1 和 col2 的名称(方程值)、p 值和 D 值。
Utopian data frame
非常感谢您!!
这是我能做到的。请编辑您的问题并添加一个可重现的示例。
我需要知道您的数据是如何定义的。我不能 运行 你的代码! :-)
无论如何,只需为每个 运行 循环创建一个数据框并将它们绑定在一起。
purrr 包的map_dfr 为您完成。
library(purrr)
.column_equality_stats <- function(i, data, lab_stats1, lab_stats2, min_count = 100){
lab_testcodes_1 <- lab_stats1[i]
lab_testcodes_2 <- lab_stats2[i]
equal_columns <- filter(data, lab_testcode==lab_testcodes_1 | lab_testcode==lab_testcodes_2)
col1 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_1, 'lab_result']
col2 <- equal_columns[equal_columns$lab_testcode==lab_testcodes_2, 'lab_result']
if(sum(!is.na(col1))>min_count && sum(!is.na(col2))>min_count){
stats <- ks.test(col1, col2)
res <- data.frame(col1 = lab_testcodes_1,
col2 = lab_testcodes_2,,
pvalue = stats$p.value,
dvalue = stats$statistics)
} else {res <- data.frame()}
res
}
column_equality_stats <- function(data, lab_stats1, lab_stats2, min_count=100) {
map_dfr(seq_along(lab_stats1),
.column_equality_stats,
data = data,
lab_stats1 = lab_stats1,
lab_stats2 = lab_stats2,
min_count = min_count)
}