str_replace_all & str_replace меняет порядок моих значений - PullRequest
0 голосов
/ 29 июня 2019

Где я ошибаюсь в этом коде:

Я запускаю следующее:

df_table <- df_table %>%
  mutate(variable = sub(".(.)$","\\1", variable)) %>%
  separate(variable, c("Section", "Quintiles"), by = "_") 


ggplot() +
  geom_point(data = df_table, aes(x = sd, y = er, fill = Quintiles)) +
  geom_text(data = df_table, aes(x = sd, y = er, label = Section))

Что дает мне мой график, как и ожидалось.

Однако, когда я пытаюсьчтобы немного очистить данные, запустив следующий код:

df_table <- df_table %>%
  mutate(variable = sub(".(.)$","\\1", variable)) %>%
  separate(variable, c("Section", "Quintiles"), by = "_") %>%
  mutate(Section = str_replace(c("BusinessDescription", "Risk", "MD", "QQDMR"), c("business", "risk", "mgnt", "qualitative"), Section),
         Quintiles = str_replace(c("Quantile 1", "Quantile 2", "Quantile 3", "Quantile 4", "Quantile 5"), c("quintile1", "quintile2", "quintile3", "quintile4", "quintile5"), Quintiles))

ggplot() +
  geom_point(data = df_table, aes(x = sd, y = er, fill = Quintiles)) +
  geom_text(data = df_table, aes(x = sd, y = er, label = Section))

Порядок имен помешан.то есть верхний правый угол должен быть «MD», но он меняется на «QQDMR» ...

Правильно ли я использовал str_replace?Я попытался использовать str_replace_all также и получить ту же проблему

df_table <- structure(list(variable = structure(1:20, .Label = c("business_quintile_1", 
"business_quintile_2", "business_quintile_3", "business_quintile_4", 
"business_quintile_5", "mgnt_quintile_1", "mgnt_quintile_2", 
"mgnt_quintile_3", "mgnt_quintile_4", "mgnt_quintile_5", "qualitative_quintile_1", 
"qualitative_quintile_2", "qualitative_quintile_3", "qualitative_quintile_4", 
"qualitative_quintile_5", "risk_quintile_1", "risk_quintile_2", 
"risk_quintile_3", "risk_quintile_4", "risk_quintile_5"), class = "factor"), 
    er = c(0.00944344775108058, 0.0109492817825732, 0.0100544836634725, 
    0.0111846535161324, 0.0102474606100841, 0.00870512064459837, 
    0.0101021642559344, 0.0135188881790885, 0.00714776598705967, 
    0.0113110293608925, 0.009367997551035, 0.00983281565841901, 
    0.00925061345025329, 0.0140518126184572, 0.0113932765565336, 
    0.00985542351988848, 0.00987916453025541, 0.0110155244063546, 
    0.0105003488159936, 0.011625325276335), sd = c(0.0555353266973089, 
    0.0612324824773668, 0.0586524509813947, 0.0586421585757461, 
    0.0607621933769669, 0.056289676912973, 0.0612436251488293, 
    0.0755471294269228, 0.064717925095145, 0.0650635417478424, 
    0.0596416153792103, 0.063161151587813, 0.0605161738039561, 
    0.0624918901956831, 0.0623820475664652, 0.0574219865964818, 
    0.0610052599119918, 0.0598646639460777, 0.0595189378979581, 
    0.0594937538495101)), row.names = c(NA, -20L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x0000000002521ef0>)

Ответы [ 2 ]

1 голос
/ 29 июня 2019

использовать str_replace_all как это:

...    
mutate(Section = str_replace_all(Section, c("BusinessDescription" = "business", 
                                            "Risk" = "risk", 
                                            "MD"   = "mgnt", 
                                            "QQDMR"= "qualitative")))
...
1 голос
/ 29 июня 2019

Помните, что функции tidyverse сначала берут аргумент ввода данных, чтобы их можно было использовать с трубами.

Кроме того, используйте case_when вместо str_replace, если у вас несколько шаблонов и несколько замен.

df_table <- df_table %>%
  mutate(variable = str_replace(variable, "_(.)$", "\\1")) %>%
  separate(variable, c("Section", "Quintiles"), by = "_") %>%
  mutate(Section = case_when(Section == "business" ~ "BusinessDescription",
                             Section == "risk" ~ "Risk",
                             Section == "mgnt" ~ "MD",
                             Section == "qualitative" ~ "QQDMR"),
         Quintiles = case_when(Quintiles == "quintile1" ~ "Quantile 1",
                               Quintiles == "quintile2" ~ "Quantile 2",
                               Quintiles == "quintile3" ~ "Quantile 3",
                               Quintiles == "quintile4" ~ "Quantile 4",
                               Quintiles == "quintile5" ~ "Quantile 5"))

ggplot(df_table, aes(x = sd, y = er)) +
    geom_point(aes(fill = Quintiles)) +
    geom_text(aes(label = Section))

enter image description here

...