병합 및 요약

getwd()
setwd('c:/users/is2js/R_da/')
aws = read.delim('data/AWS_sample.txt',
                  sep='#',
                  stringsAsFactors = FALSE)
head(aws)

#### 데이터 병합 ####
# bind함수를 이용한 data.frame을 묶어준다.
# cbind()-columns으로서 가로로 붙혀주기와 rbind()-row로서 세로로 붙혀주기가 있다.
aaa = aws[1:3,2:4]
bbb = aws[9:11,2:4]

#cbind()
cbind(aaa, bbb)
#rbind()
rbind(aaa, bbb, aaa, bbb, aaa, bbb)

#### 유의사항! ####
# row의 수가 다를 경우 cbind()시 에러가 난다.! -> data.frame은 사각형으로 구성되어야 함.!
ccc = aws[1:3, 2:4]
ddd = aws[9:10, 2:4]
cbind(ccc, ddd)

# col의 수가 다를 경우 rbind()시 에러가 난다. -> 사각형 안만들어짐
# 사실 rbind()는  컬럼의 이름과 속성도 똑같아야 함

ccc = aws[1:3, 2:4]
ddd = aws[9:11, 2:3]
rbind(ccc, ddd)


#### table()함수를 이용한 표를 만들어 데이터 요약 ####
# my) 요약은 칼럼추출($, [a:b] 요약정보를 의미하는 것 같다.
aws = read.delim('data/AWS_sample.txt',
                  sep='#',
                  stringsAsFactors = FALSE)
# 1. 데이터프레임 aws에서 $을 이용해 하위 컬럼을 요약한다.
# 2. 요약 정보는, 해당 칼럼의 데이터값 별로 원소의 갯수를 알려주는데, 모양도 안이쁘고 한글이 들어가면 엉망이 된다. 이 때, 패키지 등이 필요하다.
# 3. 아래와 같이 하나의 칼럼만 요약한다면, 칼럼형식으로 원소의 갯수를 알려줌
table(aws$AWS_ID)
# 4. 2차원 이상이 되면, 앞의 정보는 row로 / 뒤의 정보는 칼럼으로 가서 원소의 개수를 알려준다.
table(aws$AWS_ID, aws$X.)

# 5. 요약정보에 칼럼명을 명시하여 요약하고 싶다면,
#    $를 이용한 추출이 아니라 벡터연산[my)인덱싱]으로 칼럼을 추출한 뒤 table()로 감싸주자.
table( aws[,c("AWS_ID", "X.")])

aws[2500:3100, "X."] = "modified"
table(aws$AWS_ID, aws$X.)

# 원소의 개수가 아닌, 비율로 보고 싶다면!
# prop.table()함수로 table을 감싸준다.
prop.table( table(aws$AWS_ID) )


# 비율을 퍼센트로 바꾸고 싶다면, * 100씩을 해주면 된다.
prop.table( table(aws$AWS_ID) ) * 100


# 퍼센트(%)를 붙혀주고 싶다면, paste0() 안에  (table(), "%")를 인자로 준다.
# - paste0는 글자를 간격없이 붙히는 함수인데, 대신 칼럼정보가 사라진다.
paste0( prop.table( table(aws$AWS_ID) ) * 100, "%")



문자열 처리


#### 실습 데이터 만들어보기 ####
sample = data.frame(aa = c("abc_sdfsdf",
                            "abc_KKdfsfsfs",
                            "ccd"),
                     bb = 1:3,
                     stringsAsFactors = FALSE)
sample


# 문자 개수 세기 - nchar()
nchar(sample[1,1])
nchar(sample[2,1])

# 특정 문자 위치(row) 확인 - which() 함수 /  칼럼인덱싱 == "찾고싶은문자"
which(sample[,1] == "ccd")

# 대소문자 변환 - toupper(), tolower()
toupper(sample[1,1])
tolower(sample[2,1])

# 문자열 분리 - library("splitstackshape")로 패키지 불러온 뒤 -> cSplit()함수를쓴다.
# 1. 패키지 설치
install.packages("splitstackshape")
# 2. 패키지 불러오기 - library()
library("splitstackshape")
# 3. 패키지내 cSplit()함수 사용하기 - S만 대문자 조심!
cSplit(sample, splitCols = "aa", sep="_") #구분자가 없다면 NA가 분리됨

# 문자열 결합 - paste0() : 공간없이 / paste() : 중간에 끼워줘서 합치기
# 각 행별로, 컬럼1과 컬럼2의 문자열을 <공백없이> 결합한다.
paste0(sample[,1], sample[,2])
# 각 행별로, 컬럼1과 컬럼2의 문자열을 <구분자를 끼워서> 결합한다.
paste(sample[,1], sample[,2], sep="@@") #sep인자가 결합하는 것이 됨.
paste(sample[,1], sample[,2],sample[,1], sep="@@@")

# 특정 문자추출 - substr(,,)
substr(sample[,1], start = 1, stop = 2) # 첫글자부터 2번째 글자까지
substr(sample[,1], 2, 4)

+ Recent posts