【问题标题】:How to standardize non-numeric characters in a column? [closed]如何标准化列中的非数字字符? [关闭]
【发布时间】:2022-01-06 14:29:12
【问题描述】:

我需要为大学组成的列中的非数字字符提供相同的名称(值)。下面列出了我的表格示例。当然,还有很多其他的大学名称、人物名称和专栏名称。我只需要更改数据框的这一部分。

Name Affiliation
Jose Ramayana OXFORD UNIVERSITY
Andres Andresius OFORD UNIVERSITY
Pepito Perez UNIVERSIDAD NACIONAL
Cacolo Osorio Universidad Nacional de Bogotá
Maleja Patras Unievrsidad del Valle
Tigre Tony Universidad Nacional
Pocho Valencia UNIVERSIDAD DEL VALLE
Puti Gutierrez OXFORD UNIVERSITY
Chuchi Lopez UPTC
Ganso Salazar Uptc
Santiago Andrade PONTIFICIA UNIVERSIDAD JAVERIANA
Andrés Tigreros JAVERIANA CALI

我试图使用此代码,但我刚刚得到了同一个人的多次复制至少 10 次。

DB_CO1<- DB_CO %>%
        mutate(FinalAssociation = map(affiliation, ~DB_CO$affiliation[str_detect(.x,DB_CO$affiliation)])) %>% 
          unnest (cols = c(FinalAssociation))

期望的结果:从属关系中的所有值以某种方式保持不变

Name Affiliation
Jose Ramayana OXFORD UNIVERSITY
Andres Andresius OXFORD UNIVERSITY
Pepito Perez UNIVERSIDAD NACIONAL DE BOGOTÁ
Cacolo Osorio UNIVERSIDAD NACIONAL DE BOGOTÁ
Maleja Patras UNIVERSIDAD DEL VALLE
Tigre Tony UNIVERSIDAD NACIONAL DE BOGOTÁ
Pocho Valencia UNIVERSIDAD DEL VALLE
Puti Gutierrez OXFORD UNIVERSITY
Chuchi Lopez UPTC
Ganso Salazar UPTC
Santiago Andrade PONTIFICIA UNIVERSIDAD JAVERIANA CALI
Andrés Tigreros PONTIFICIA UNIVERSIDAD JAVERIANA CALI

非常感谢您的帮助。

【问题讨论】:

  • 你能编辑你的问题并显示你想要的输出吗?
  • 您的代码似乎没有做任何替换,只是检测是否找到了某个字符串。据我所知,您只是在标记从属列是否包含从属列......这不会证明很有用

标签: r dplyr tidyverse


【解决方案1】:

这个agrep 解决方案依赖于几个假设。

  1. 项目之间可能存在模糊匹配(即没有像 UN 等严重缩写的名称)
  2. 较长的字符串是所需的名称。
  3. 不会出现歧义。
dat_n <- sapply( dat$Affiliation, function(x)
  dat$Affiliation[agrep(x,dat$Affiliation,ignore.case = TRUE)] )

dat$Affiliation_new <- toupper( unlist(sapply( dat_n, function(x)
  x[which.max( nchar(x) )] )) )

               Name                      Affiliation
1     Jose Ramayana                OXFORD UNIVERSITY
2  Andres Andresius                 OFORD UNIVERSITY
3      Pepito Perez             UNIVERSIDAD NACIONAL
4     Cacolo Osorio   Universidad Nacional de Bogotá
5     Maleja Patras            Unievrsidad del Valle
6        Tigre Tony             Universidad Nacional
7    Pocho Valencia            UNIVERSIDAD DEL VALLE
8    Puti Gutierrez                OXFORD UNIVERSITY
9      Chuchi Lopez                             UPTC
10    Ganso Salazar                             Uptc
11 Santiago Andrade PONTIFICIA UNIVERSIDAD JAVERIANA
12  Andrés Tigreros                   JAVERIANA CALI
                    Affiliation_new
1                 OXFORD UNIVERSITY
2                 OXFORD UNIVERSITY
3    UNIVERSIDAD NACIONAL DE BOGOTÁ
4    UNIVERSIDAD NACIONAL DE BOGOTÁ
5             UNIEVRSIDAD DEL VALLE
6    UNIVERSIDAD NACIONAL DE BOGOTÁ
7             UNIEVRSIDAD DEL VALLE
8                 OXFORD UNIVERSITY
9                              UPTC
10                             UPTC
11 PONTIFICIA UNIVERSIDAD JAVERIANA
12                   JAVERIANA CALI

数据

dat <- structure(list(Name = c("Jose Ramayana", "Andres Andresius",
"Pepito Perez", "Cacolo Osorio", "Maleja Patras", "Tigre Tony",
"Pocho Valencia", "Puti Gutierrez", "Chuchi Lopez", "Ganso Salazar",
"Santiago Andrade", "Andrés Tigreros"), Affiliation = c("OXFORD UNIVERSITY",
"OFORD UNIVERSITY", "UNIVERSIDAD NACIONAL", "Universidad Nacional de Bogotá",
"Unievrsidad del Valle", "Universidad Nacional", "UNIVERSIDAD DEL VALLE",
"OXFORD UNIVERSITY", "UPTC", "Uptc", "PONTIFICIA UNIVERSIDAD JAVERIANA",
"JAVERIANA CALI")), class = "data.frame", row.names = c(NA, -12L
))

【讨论】:

  • 非常感谢朋友的回答!但我不知道我在使用这段代码时是否做错了什么。我得到了所有大学的新列表,按行排列。我已经完成了我的问题,如果可能有所帮助。
  • @AndrésFelipeTigreros-Andrade 我进行了更改。正如你所看到的,它几乎把一切都做好了。只是 JAVERIANA CALI 无法识别。就是因为差距太大了。如果您将其更改为 JAVERIANA 它可以工作。如果没有可供选择的模板集,这可能是您可以获得的最佳效果。它是一种无监督的替换,总是很棘手。
  • @AndrésFelipeTigreros-Andrade 顺便说一句,我将替换项放入 ..._new 以显示旧值旁边的更改。只需使用dat$Affiliation &lt;- toupper( unlist(sapply( dat_n, function(x) x[which.max( nchar(x) )] )) ) 作为第二行来替换旧值。
  • @AndrésFelipeTigreros-Andrade 哦,没有模板是不可能在UNIVERSIDAD DEL VALLEUNIEVRSIDAD DEL VALLE 之间选择正确的。
猜你喜欢
  • 2023-04-01
  • 2015-05-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多