簡體   English   中英

R:如何以更有效的方式替換幾個不同的值?

[英]R: How to replace several different values in a more efficient way?

鑒於這個數據集,我想知道是否有辦法以更有效和更少重復的方式解決這個問題。

數據集由一系列課程組成,其中一些課程重復並以不同方式書寫(全部以大寫字母或額外空格等)

為了解決這個問題,我使用以下方法:

# Load dataset
courses <- read.csv('courses.csv')
courses$x[courses$x == 'KOE'] <- 'Koe'
courses$x[courses$x == 'koe'] <- 'Koe'
courses$x[courses$x == 'BENL'] <- 'Benl'
courses$x[courses$x == 'engin'] <- 'Engine'
courses$x[courses$x == 'Fiqh'] <- 'Fiqh Fatwa'
courses$x[courses$x == 'Fiqh fatwa '] <- 'Fiqh Fatwa'
courses$x[courses$x == 'Islamic education'] <- 'Islamic Education'
courses$x[courses$x == 'KIRKHS'] <- 'Kirkhs'
courses$x[courses$x == 'Laws'] <- 'Law'
courses$x[courses$x == 'Pendidikan islam'] <- 'Pendidikan Islam'
courses$x[courses$x == 'Pendidikan Islam '] <- 'Pendidikan Islam'
courses$x[courses$x == 'psychology'] <- 'Psychology'

還有什么其他更有效和更少重復的方法來解決這個問題?

你可以這樣做:

courses$x <- tools::toTitleCase(tolower(courses$x))

courses
                   x
1                Koe
2                Koe
3               Benl
4              Engin
5               Fiqh
6         Fiqh Fatwa
7  Islamic Education
8             Kirkhs
9               Laws
10  Pendidikan Islam
11  Pendidikan Islam
12        Psychology

數據:

courses <- data.frame(x = c("KOE", "koe", "BENL", "engin", "Fiqh", "Fiqh fatwa",
                             "Islamic education", "KIRKHS", "Laws", "Pendidikan islam", 
                             "Pendidikan Islam", "psychology"))

怎么樣

apply(courses, 2, (function(x) paste(toupper(substr(x, 1, 1)), tolower(substr(x, 2, nchar(x))), sep="")))

匿名函數將第一個字符轉換為大寫,其余的轉換為小寫。 apply , 適用於所有元素

就像是

courses$y = sapply(courses$x, (function(x) paste(toupper(substr(x, 1, 1)), tolower(substr(x, 2, nchar(x))), sep="")))

如果你有其他專欄也很好。

如果你可以安裝包,最好使用包, stringr有很多功能,包括str_to_title

str_to_title(courses$x)

會做你想做的事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM