我正在尝试从SPSS输出创建RedCap数据字典。 SPSS列出了每个变量的允许值或因子,如下所示:
SEX 0 Male
1 Female
LANGUAGE 1 English
2 Spanish
3 Other
6 Unknown
如何将以上内容转换为RedCap的这种格式:
Variable Values
SEX 0, Male | 1, Female
LANGUAGE 1, English | 2, Spanish | 3, Other | 6, Unknown
我最喜欢的语言是R。预先感谢!
答案 0 :(得分:0)
这是一种依靠sub()
和tidyr::fill()
的方法。它会返回您可能要写入磁盘的数据集(使用类似readr::write_csv()
或从R控制台直接粘贴到REDCap data dictionary中的数据集。
根据您的情况,raw_text
可能是文件路径。
raw_text <- "
SEX 0 Male
1 Female
LANGUAGE 1 English
2 Spanish
3 Other
6 Unknown"
ds_raw <- readr::read_csv(
file = raw_text,
col_names = FALSE,
trim_ws = FALSE
)
\\s*?
可能会被删除。)Variable
中的NA
取代。ID
和Value
被伪装成Values
。tidyr::fill()
结转丢失的Variable
单元格。library(magrittr)
pattern <- "^\\s*?(\\w+)?\\s+(\\d{1,3})\\s+(.+?)$"
ds_completed <- ds_raw %>%
dplyr::mutate(
Variable = sub(pattern, "\\1", X1),
ID = as.integer(sub(pattern, "\\2", X1)),
Value = sub(pattern, "\\3", X1),
Variable = dplyr::na_if(Variable, ""),
Values = paste0(ID, ", ", Value)
) %>%
tidyr::fill(Variable) %>%
dplyr::select(-X1)
中间结果:
# A tibble: 6 x 4
Variable ID Value Values
<chr> <int> <chr> <chr>
1 SEX 0 Male 0, Male
2 SEX 1 Female 1, Female
3 LANGUAGE 1 English 1, English
4 LANGUAGE 2 Spanish 2, Spanish
5 LANGUAGE 3 Other 3, Other
6 LANGUAGE 6 Unknown 6, Unknown
Variable
的初始顺序ds_order <- ds_completed %>%
dplyr::distinct(Variable) %>%
tibble::rowid_to_column("variable_order")
Variable
输出一行内容Values
,用管道分隔。Variable
和ds_order
来恢复arrange()
的顺序。ds_completed %>%
dplyr::group_by(Variable) %>%
dplyr::summarize(
Values = paste(Values, collapse = " | ")
) %>%
dplyr::ungroup() %>%
dplyr::left_join(ds_order, by="Variable") %>%
dplyr::arrange(variable_order) %>%
dplyr::select(-variable_order)
# A tibble: 2 x 2
Variable Values
<chr> <chr>
1 SEX 0, Male | 1, Female
2 LANGUAGE 1, English | 2, Spanish | 3, Other | 6, Unknown
我从不需要从SPSS格式转到REDCap数据字典,但是您需要在这里有意义。 如果这是SPSS用户(略懂R的用户)的经常性需求,我愿意将其迁移为REDCapR函数 并编写单元测试,以创建new issue 并保存一些示例输入数据集和预期数据集(用于单元测试)。
如果您需要以相反的方向进行翻译,请考虑使用REDCapR::checkbox_choices()
。
REDCapR和redcapAPI是开发的两个R包 围绕REDCap API。大约有一打packages written in various languages for the REDCap API, 但是SPSS目前不是其中之一。