이번 포스트에서는 다양한 방법을 사용하여 R에서 문자열(String) 조작 방법을 설명합니다. 설명에 사용할 데이터는 아래 코드로 생성 및 활용할 예정입니다.
data <- c("Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from noisy, structured and unstructured data,[1][2] and apply knowledge and actionable insights from data across a broad range of application domains. Data science is related to data mining, machine learning and big data.",
"",
"Data science is a \"concept to unify statistics, data analysis, informatics, and their related methods\" in order to \"understand and analyze actual phenomena\" with data.[3] It uses techniques and theories drawn from many fields within the context of mathematics, statistics, computer science, information science, and domain knowledge. However, data science is different from computer science and information science. Turing Award winner Jim Gray imagined data science as a \"fourth paradigm\" of science (empirical, theoretical, computational, and now data-driven) and asserted that \"everything about science is changing because of the impact of information technology\" and the data deluge.[4][5]",
"",
"A data scientist is someone who creates programming code, and combines it with statistical knowledge to create insights from data.[6]")
head(data)
data 변수에는 문서 다섯 줄(lines)의 내용이 각각 들어있으며, 아래에서 해당 라인의 예를 볼 수 있습니다.
[1] "Data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from noisy, structured and unstructured data,[1][2] and apply knowledge and actionable insights from data across a broad range of application domains. Data science is related to data mining, machine learning and big data."
[2] ""
[3] "Data science is a \"concept to unify statistics, data analysis, informatics, and their related methods\" in order to \"understand and analyze actual phenomena\" with data.[3] It uses techniques and theories drawn from many fields within the context of mathematics, statistics, computer science, information science, and domain knowledge. However, data science is different from computer science and information science. Turing Award winner Jim Gray imagined data science as a \"fourth paradigm\" of science (empirical, theoretical, computational, and now data-driven) and asserted that \"everything about science is changing because of the impact of information technology\" and the data deluge.[4][5]"
[4] ""
[5] "A data scientist is someone who creates programming code, and combines it with statistical knowledge to create insights from data.[6]"
R 문자열 조작
nchar()
nchar() 함수를 사용하면 문자열(String)을 인수로 제공하여 문자열의 문자 수를 계산할 수 있습니다.
nchar(data[1])
[1] 362
data 벡터의 첫 번째 요소는 위 결과에서 보여지듯이 362자로 구성된 문자열입니다.
toupper()
toupper() 함수는 문자열의 모든 문자를 대문자로 변환하는 데 사용할 수 있습니다.
toupper(data[1])
[1] "DATA SCIENCE IS AN INTERDISCIPLINARY FIELD THAT USES SCIENTIFIC METHODS, PROCESSES, ALGORITHMS AND SYSTEMS TO EXTRACT KNOWLEDGE AND INSIGHTS FROM NOISY, STRUCTURED AND UNSTRUCTURED DATA,[1][2] AND APPLY KNOWLEDGE AND ACTIONABLE INSIGHTS FROM DATA ACROSS A BROAD RANGE OF APPLICATION DOMAINS. DATA SCIENCE IS RELATED TO DATA MINING, MACHINE LEARNING AND BIG DATA."
tolower()
위 출력에서 어떻게 표시되는지에 대한 예를 볼 수 있으며, 마찬가지로 모든 문자열의 문자를 소문자로 변경하려면 tolower() 메소드를 사용할 수 있습니다.
tolower(data[1])
[1] "data science is an interdisciplinary field that uses scientific methods, processes, algorithms and systems to extract knowledge and insights from noisy, structured and unstructured data,[1][2] and apply knowledge and actionable insights from data across a broad range of application domains. data science is related to data mining, machine learning and big data."
chartr()
chartr() 함수는 문자열의 특정 문자 집합을 대체하는 데 사용할 수 있습니다.
chartr(" ","-",data[1])
첫 번째 입력은 대체되어야 하는 문자가 포함된 문자열입니다. 대체 문자는 문자열인 두 번째 인수에 저장됩니다.
[1] "a across actionable algorithms an and and and and and and application apply big broad data data Data Data data,[1][2] data. domains. extract field from from insights insights interdisciplinary is is knowledge knowledge learning machine methods, mining, noisy, of processes, range related science science scientific structured systems that to to unstructured uses"
우리는 단순히 하나의 공백 문자를 사용하여 이들을 구분할 것입니다. 알파벳순으로 정렬된 목록은 이 출력에서 단일 문자열로 표시됩니다.
정수는 소수 없이 값을 가질 수 있는 숫자 데이터 타입입니다. 변수가 미래에도 소수를 가질 수 없다고 확신할 때 주로 사용됩니다.
정수 변수를 생성하려면 값 끝에 접미사 L을 사용해야 합니다. 예를 들어,
my_integer <- 123L
# print the value of my_integer
print(my_integer)
# print the data type of my_integer
print(class(my_integer))
[1] 123
[1] "integer"
여기서 변수 my_integer는 123L값을 가지게 됩니다. 값 끝에 있는 접미사 L은 my_integer가 정수 타입임을 나타냅니다.
Complex Data Type
R에서 복소수 데이터 유형을 가지는 변수는 허수부가 있는 값을 포함합니다. i를 접미사로 사용하여 표시할 수 있습니다. 예를 들어,
# variable with only imaginary part
z1 <- 5i
print(z1)
print(class(z1))
# variable with both real and imaginary parts
z2 <- 3 + 3i
print(z2)
print(class(z2))
[1] 0+5i
[1] "complex"
[1] 3+3i
[1] "complex"
여기에서 변수 z1 및 z2는 접미사 i로 표시된 허수부가 있는 복소수 데이터 유형으로 선언되었습니다.
FAQ
숫자(number)를 Numeric 타입으로 변환
R에서는 as.numeric() 함수를 사용하여 숫자를 Numeric 타입으로 변환할 수 있습니다. 예를 들어,
# integer variable
a <- 4L
print(class(a))
# complex variable
b <- 1 + 2i
print(class(b))
# convert from integer to numeric
x <- as.numeric(a)
print(class(x))
# convert from complex to numeric
y <- as.numeric(b)
print(class(y))
[1] "integer"
[1] "complex"
[1] "numeric"
[1] "numeric"
Warning message:
imaginary parts discarded in coercion
여기에서 복소수(complex)를 Numeric 타입으로 변환하는 동안 허수부가 버려지는 것을 볼 수 있습니다.
그렇다면 숫자를 복수수(complex) 타입으로 변환하려면 어떻게 해야 할까요?
숫자(number)를 complex 타입으로 변환
R에서는 as.complex() 함수를 사용하여 임의의 숫자를 복소수 값으로 변환할 수 있습니다. 예를 들어,
# integer variable
a <- 4L
print(class(a))
# numeric variable
b <- 23
print(class(b))
# convert from integer to complex
y <- as.complex(a)
print(class(y))
# convert from numeric to complex
z <- as.complex(b)
print(class(z))
위의 R 명령어에서 "\\.(csv|txt)$" 패턴은 1) 파일명 끝에 적용($), 2) csv 또는 txt 파일과 같은 다중 파일 확장자((csv| txt))는 허용되지만 ccsv 또는 ttxt(\\.)와 같은 유사한 확장자는 허용되지 않습니다. 대소문자 구분이 무시되므로 csv 및 CSV 또는 txt 및 TXT가 허용됩니다(ignore.case = TRUE).
R 코드
위에서 소개한 list.files() 함수와 반복문을 함께 사용하면 폴더 내 특정 파일 리스트를 추출하는 문제를 쉽게 풀어낼 수 있습니다.
아래 다음 R 코드는 1) 각 csv(CSV) 또는 txt(TXT) 파일을 읽어 각 data.frame을 별도로 만들고, 2) 해당 데이터를 읽어와 하나의 data.frame으로 저장합니다.
#========================================================#
# Quantitative ALM, Financial Econometrics & Derivatives
# ML/DL using R, Python, Tensorflow by Sang-Heon Lee
#
# https://kiandlee.blogspot.com
#——————————————————–#
# Basic R : read all csv files when these are so many
#========================================================#
graphics.off() # clear all graphs
rm(list = ls()) # remove all files from your workspace
# working directory
setwd(“D:/SHLEE/blog/R/many_csv”)
# directory where csv files are located
path<– file.path(getwd())
#——————————————————-
# make a list of all file names with csv or txt ext.
#——————————————————-
# $ : end of file name
# (csv|txt) : multiple file extentions
# \\. : avoid unwanted cases such as .ccsv
#——————————————————-
v.filename <– list.files(path, pattern=“\\.(csv|txt)$”,
ignore.case = TRUE,
full.names = FALSE)
#——————————————————-
# Test 1) read and make each data.frame
#——————————————————-
for(fn in v.filename) {
df.each = read.csv(fn)
print(fn); print(df.each)
}
#——————————————————-
# Test 2) read and collect into one data.frame
#——————————————————-
df.all = do.call(rbind, lapply(v.filename,
function(x) read.csv(x)))
print(df.all)
출력 결과
우리는 출력 결과를 통해 올바른 파일 확장자를 가진 4개의 파일은 정상적으로 읽어왔지만 2개의 원치 않는 파일(.CCSV 및 .ttxt)은 제외되었다는 것을 확인할 수 있습니다.