[英]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.