<데이터 조작1>
파일읽기
a<- read.csv("TEST.csv")
a
str(a)
#읽어드린 data.frame에열을추가한다
a$name = as.character (a$DD)
a
a$name1 = as.character (a$DD)
a$name2 = "222" #임의 값 추가
a
str(a) #전체 구조확인
#형변환 : character->numeric
a$name1 = as.numeric(a$DD)
a
파일 읽고 쓰기
write.csv (a, "a_write.csv ", row.names =F)
#CSV파일의 첫열은 행번호 1, 2, 3을 의미하는데이터저장에 꼭 필요한것은 아님)
#성적 데이터 읽고 쓰기
score <- read.csv("score.csv")
score
str(score)
write.csv(score, "write_score1.csv", row.names = F)
save(), load()
#save()
x <- 1:5
y <- 6:10
save (x, y, file ="xy.RData")x<-
x
Y
#load()
load ("xy.RData ")
x
y
t<- 1:100
save(t, file="t.RData")
rm(list=ls())
load("t.RData")
t
str(t)
#데이터 프레임 역시 rbind()를 이용 합침
#stringsAsFactors : name 컬럼의 데이터를 Factor가 아니라 문자열로 취급할때
< ★Apply 함수들★ >
apply()
apply() : apply(행렬, 방향,함수) 형태로 호출
‘방향’은 1이 주어지면 행, 2가 주어지면 열을 뜻함
#sum 계산
sum (1:10)
#apply()를 사용한 행렬 합 계산
d <- matrix (1:9 , ncol =3)
d
#행 방향 합
x <- apply (d, 1, sum)
x
#열방향 합
y<- apply (d, 2, sum)
y
#iris ()
head ( iris )
#모든 행에서 1∼4열만 sum 구하기
apply ( iris [, 1:4] , 2, sum )
#행렬의 합 계산 함수 : rowSums(), colSums()
x<- colSums ( iris [, 1:4])
x
lapply()
lapply()는 lapply(X, 함수)의 형태로 호출,
이때 ‘X’는 벡터 또는 리스트,
‘함수’는 ‘X’내각 요소에 적용할 함수.
결과 : 함수를 적용한 결과는 리스트로 반환.
result <- lapply (1:3 , function (x) { x*2 })
result
result [[1]] #실제값
# 리스트로 나온 값을 다시 벡터로 변환
unlist (result)
#lapply()는 인자로 리스트를 받을 수 있음
x <- list (a=1:3 , b =4:6)
x
# 리스트 마다 각 변수의 평균 계산 (a 객체, b객체)
lapply (x, mean )
# 데이터 프레임에 lapply() 적용하기
lapply ( iris [, 1:4] , mean )
#변수에 담아 특정 열만 접근
y<- lapply ( iris [, 1:4] , mean )
y
y$Sepal.Width
#각 열의 평균은 colMeans() 으로 계산하기
colMeans ( iris [, 1:4])
★ do.call(호출할 함수, 파라미터)’ 함수 사용 ★
lapply()가 반환한 리스트내에 각 컬럼별 계산결과가들어있ㅇ
따라서 이를 새로운 데이터 프레임의 컬럼들로 합치기 위해 cbind()를 사용한다.
data.frame ( do.call (cbind , lapply ( iris [, 1:4] , mean )))
#unlist()는 벡터를 반환하며 벡터에는 한가지 데이터 타입만 저장
→ 데이이터저장 엉터리 변환
x <- list ( data.frame ( name ="foo ", value =1) ,
data.frame ( name ="bar", value =2))
x
unlist(x)
#‘do.call() 함수 사용
x <- list ( data.frame ( name ="foo ", value =1) ,
data.frame ( name ="bar", value =2))
do.call (rbind , x)
sapply()
# sapply()는 lapply()와 유사하지만 리스트대신 행렬, 벡터로결과 반환함수.
# 입력으로는 벡터, 리스트, 데이터 프레임등이 쓰일 수 있다.
# sapply()는 한가지 타입만 저장가능한 데이터 타입인 벡터, 행렬, 배열을 반환
# 만약 각 컬럼들에 대해 수행한 함수의 결과 데이터 타입이 다르다면,
# 리스트를 반환하는 lapply() 사용
#결과 리스트반환 예
lapply ( iris [, 1:4] , mean )
#결과 벡터 반환 예
sapply ( iris [, 1:4] , mean )
class ( sapply ( iris [, 1:4] , mean ))
#sapply()에 의해 반환된 벡터는 as.data.frame()을 사용해 데이터 프레임으로 변환
x <- sapply ( iris [, 1:4] , mean )
as.data.frame (x)
#또한 sapply()를 각 열에 저장된 데이터의 클래스를 알아내는데 사용
sapply (iris , class )
tapply()
# 행렬
m <- matrix (1:8 ,
ncol =2,
dimnames = list (c(" spring ", " summer ", " fall ", " winter "),
c(" male ", " female ")))
m
첫번째 벡터는 상반기인지 하반기인지의 구분을 표현,
두번째 벡터는 성별을 표시
sum :같은 그룹에 속한 데이터끼리 연산수행 --> 성별/반기별 합 계산.
tapply (m, list (c(1, 1, 2, 2, 1, 1, 2, 2) ,
c(1, 1, 1, 1, 2, 2, 2, 2)), sum)
mapply()
mapply()는 sapply()와 유사하나 다수의 인자를 함수에 넘긴다는데서 차이가 있음
sprintf() : 데이터를 문자열로 변환
인자 : 포멧팅 문자열, 문자열 변환할 변수
#예1 :“%d%s”를 사용했는데 %d는 정수를, %s는 문자열을 뜻함
# 주어진 인자 : c(1, 2, 3)과 c(“a”, “b”, “c”)
mapply ( function (i, s) {
sprintf ("%d%s", i, s) }, 1:3 , c("a", "b", "c"))
# iris의 각 컬럼 평균을 구하는 경우
mapply (mean , iris [1:4])
카테고리 없음
R - 데이터 조작 , apply()
반응형
반응형