在 R 方法中减少标记具有多个级别的因素时可能出现的错误
In R methods to reduce possible error when labeling a factor with many levels
我有一个 75 级的变量,我想对其进行格式化。但是,我发现很难在不格式化关卡的情况下做到这一点。
如您所知,创建一个具有水平的因子是这样完成的:
df$f <- factor(df$f, levels=c('a','b','c'),
labels=c('Treatment A','Treatment B','Treatment C'))
有没有办法对此进行不同的编码,以便将标签写在关卡旁边。我正在寻找这种结构的代码:
'a' = 'Treatment A'
'b' = 'Treatment B'
'c' = 'Treatment C'
感谢转发
您可以为级别标签对使用命名向量并转换为这样的因子:
foo <- c("a", "c", "b")
rec <- c(
"a" = "Treatment A",
"b" = "Treatment B",
"c" = "Treatment C"
)
factor(foo, levels = names(rec), labels = rec)
#> [1] Treatment A Treatment C Treatment B
#> Levels: Treatment A Treatment B Treatment C
如果您有一长串等价项,将其作为单独的文件包括在内通常是一个很好的工作流程,例如icdcodes.csv
包含
code,descr
C00.0,Upper lip cancer
C00.1,Lower lip cancer
...
那么你可以这样做:
codeinfo <- read.csv("icdcodes.csv")
factor(foo, levels = codeinfo$code, labels = codeinfo$descr
理想情况下,您甚至可以直接从 CDC 获得 ICD10 描述(尽管在实践中这可能行不通,因为描述比您的长,例如 C000 是“外上唇恶性肿瘤”,而不是“上唇癌”...) [另请注意,CDC 文件在代码中没有点分隔符,C0000 而不是 C00.00]
icd_url <- "https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD10CM/2022/icd10cm_codes_2022.txt"
codeinfo <- read.fwf(icd_url, widths = c(8,100))
names(codeinfo) <- c("code", "descr")
codeinfo$code <- trimws(codeinfo$code)
我有一个 75 级的变量,我想对其进行格式化。但是,我发现很难在不格式化关卡的情况下做到这一点。
如您所知,创建一个具有水平的因子是这样完成的:
df$f <- factor(df$f, levels=c('a','b','c'),
labels=c('Treatment A','Treatment B','Treatment C'))
有没有办法对此进行不同的编码,以便将标签写在关卡旁边。我正在寻找这种结构的代码:
'a' = 'Treatment A'
'b' = 'Treatment B'
'c' = 'Treatment C'
感谢转发
您可以为级别标签对使用命名向量并转换为这样的因子:
foo <- c("a", "c", "b")
rec <- c(
"a" = "Treatment A",
"b" = "Treatment B",
"c" = "Treatment C"
)
factor(foo, levels = names(rec), labels = rec)
#> [1] Treatment A Treatment C Treatment B
#> Levels: Treatment A Treatment B Treatment C
如果您有一长串等价项,将其作为单独的文件包括在内通常是一个很好的工作流程,例如icdcodes.csv
包含
code,descr
C00.0,Upper lip cancer
C00.1,Lower lip cancer
...
那么你可以这样做:
codeinfo <- read.csv("icdcodes.csv")
factor(foo, levels = codeinfo$code, labels = codeinfo$descr
理想情况下,您甚至可以直接从 CDC 获得 ICD10 描述(尽管在实践中这可能行不通,因为描述比您的长,例如 C000 是“外上唇恶性肿瘤”,而不是“上唇癌”...) [另请注意,CDC 文件在代码中没有点分隔符,C0000 而不是 C00.00]
icd_url <- "https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD10CM/2022/icd10cm_codes_2022.txt"
codeinfo <- read.fwf(icd_url, widths = c(8,100))
names(codeinfo) <- c("code", "descr")
codeinfo$code <- trimws(codeinfo$code)