我错过了一些更巧妙的方法吗?使用来自 NHSDataDictionaRy 的 tibble 重构 tibble
Am I missing some slicker way? Re-factoring a tibble using a tibble from NHSDataDictionaRy
所以我需要重新导入数据,我看到 R 已经发布了 NHS 数据字典包,所以我想我可以用它来将性别列中的 1 和 2 映射到更有用的命名因子(即男性和女性),我永远不记得哪个是哪个,所以他们肯定需要分类。
我的示例数据集:
gender
age
1
40
2
43
2
56
1
72
9
34
使用新包从 NHS 数据字典获取数据非常简单 - 如果输入有点繁重...
连接我的数据很容易,但在这种情况下 'feels' 方法不对。
require(dplyr)
require(forcats)
require(NHSDataDictionaRy)
myData <- tibble ( gender = as.factor(c("1","2","2","1", "9")),
age = c(40,43,56,72,34)
)
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == "PERSON STATED GENDER CODE"],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == "PERSON STATED GENDER CODE"] ) %>%
select(Code, Description) -> genderLookup
set_names( genderLookup$Code, genderLookup$Description) -> genderLookup
myData %>%
mutate(gender = fct_recode(gender, !!!genderLookup))
给出:
gender
age
Male
40
Female
43
Female
56
Male
72
Indeterminate (unable to be classified as either male or female)
34
以上作品。但是它的机器人丑陋的代码!
1. Lookup 可以更简洁。也许它只是需要我写一个函数?
NHStableR <- function(link_name) {
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == link_name],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == link_name] ) %>%
select(Code, Description)
}
NHStableR("PERSON STATED GENDER CODE")
想知道是否应该将其作为更新提出?
但后来...
2。分解 保存到一个对象,'flattening' 将对象放入一个命名列表,然后用它重新编码因子感觉非常'non-tidyverse'
那么函数的命名元素版本会更好吗? 或我是否完成了我看起来非常擅长的事情 - 并创建了 3 个步骤,而我本可以输入 doSomeMagicThing(Gender) 并对其进行排序?
NHSnameR <- function(link_name) {
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == link_name],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == link_name] ) %>%
select(Code, Description) -> x
set_names( x$Code, x$Description)
}
myData %>%
mutate(gender = fct_recode(gender, !!!NHSnameR("PERSON STATED GENDER CODE")))
可能是我不太了解数据字典,不知道这是否可行?
所以:
1. 我是不是错过了一些更整洁的东西(双关语!)
2. 如果没有,那么有人对此有想法吗?我意识到这有点小众!
3. 也许是最简单的 - 如果字典有数据中没有的选项(比如我的数据中没有未知性别) - 它会生成警告。可以压制吗?
4. 正在对代码中的数据进行 HTTP 查找,这样不好
添加到开发版本的新功能现在提供这些功能。
NHStableR( "PERSON STATED GENDER CODE" )
tableRtoNamedList ( "PERSON STATED GENDER CODE", table_method = "NHStableR" )
所以我需要重新导入数据,我看到 R 已经发布了 NHS 数据字典包,所以我想我可以用它来将性别列中的 1 和 2 映射到更有用的命名因子(即男性和女性),我永远不记得哪个是哪个,所以他们肯定需要分类。
我的示例数据集:
gender | age |
---|---|
1 | 40 |
2 | 43 |
2 | 56 |
1 | 72 |
9 | 34 |
使用新包从 NHS 数据字典获取数据非常简单 - 如果输入有点繁重...
连接我的数据很容易,但在这种情况下 'feels' 方法不对。
require(dplyr)
require(forcats)
require(NHSDataDictionaRy)
myData <- tibble ( gender = as.factor(c("1","2","2","1", "9")),
age = c(40,43,56,72,34)
)
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == "PERSON STATED GENDER CODE"],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == "PERSON STATED GENDER CODE"] ) %>%
select(Code, Description) -> genderLookup
set_names( genderLookup$Code, genderLookup$Description) -> genderLookup
myData %>%
mutate(gender = fct_recode(gender, !!!genderLookup))
给出:
gender | age |
---|---|
Male | 40 |
Female | 43 |
Female | 56 |
Male | 72 |
Indeterminate (unable to be classified as either male or female) | 34 |
以上作品。但是它的机器人丑陋的代码!
1. Lookup 可以更简洁。也许它只是需要我写一个函数?
NHStableR <- function(link_name) {
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == link_name],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == link_name] ) %>%
select(Code, Description)
}
NHStableR("PERSON STATED GENDER CODE")
想知道是否应该将其作为更新提出?
但后来...
2。分解 保存到一个对象,'flattening' 将对象放入一个命名列表,然后用它重新编码因子感觉非常'non-tidyverse'
那么函数的命名元素版本会更好吗? 或我是否完成了我看起来非常擅长的事情 - 并创建了 3 个步骤,而我本可以输入 doSomeMagicThing(Gender) 并对其进行排序?
NHSnameR <- function(link_name) {
nhs_data_lookup <- nhs_data_elements()
tableR(nhs_data_lookup$full_url[nhs_data_lookup$link_name == link_name],
nhs_data_lookup$xpath_nat_code[nhs_data_lookup$link_name == link_name] ) %>%
select(Code, Description) -> x
set_names( x$Code, x$Description)
}
myData %>%
mutate(gender = fct_recode(gender, !!!NHSnameR("PERSON STATED GENDER CODE")))
可能是我不太了解数据字典,不知道这是否可行?
所以: 1. 我是不是错过了一些更整洁的东西(双关语!)
2. 如果没有,那么有人对此有想法吗?我意识到这有点小众!
3. 也许是最简单的 - 如果字典有数据中没有的选项(比如我的数据中没有未知性别) - 它会生成警告。可以压制吗?
4. 正在对代码中的数据进行 HTTP 查找,这样不好
添加到开发版本的新功能现在提供这些功能。
NHStableR( "PERSON STATED GENDER CODE" )
tableRtoNamedList ( "PERSON STATED GENDER CODE", table_method = "NHStableR" )