R for SAS ans SPSS Users

Chapter 9 Data Acquisition

9.1 The R Data Editor

간단한 data frame을 만들고 data editor를 이용하여 자료 입력

> mydata <- data.frame(id =0)
변수 이름 id, 자료는 0인 data frame 만들기

> fix(mydata)

R data editor를 불러냄

변수명을 변경하고,numeric or character 선택.자료 입력. 자료가 missing 그냥 빈칸


그리고 X를 클릭하여 창 닫고 저장

> mydata2 <- data.frame(id = 0., workshop = 0., gender = "",
q1 = 0., q2 = 0., q3 = 0., q4 = 0.)

변수명 변경과 숫자 및 문자 선택을 R data editor에서 하기 싫으면 위와 같이 data frame 생성

> mydata <- edit(mydata)
edit 함수를 이용하여 R data editor을 부를 수도 있음

> edit(mydata)

R data editor를 부를 수는 있으나 창을 닫았을 때 저장이 안됨

> mydata <- .Last.value

R data editor에서 변경된 것, 그러나 저장이 안 된 것을 저장함

9.2 Reading Delimited Text Files

delimited text file은 space, tab, comma 등으로 값이 분리 된 파일

delimited text file을 읽기 위하여 read.table 함수 이용

첫째 줄을 변수 이름으로 사용할 수도 있음

tab 또는 space로 값이 분리된 mydata.tab 준비

> getwd()

> setwd("c:/temp")

> getwd()

현재 working directory 확인. c:/temp를 working director로 지정. 현재 wd 확인

> mydata3 <- read.table("mydata.tab")

> mydata3

mydata.tab을 읽기. 확인.

comma로 값이 분리된 mydata.csv 준비

> mydata4 <- read.table("mydata.csv",
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ")
> mydata4

mydata.csv를 읽음. 첫째 줄을 변수명으로 사용. 값의 분리는 comma, 행의 이름은 id 컬럼, missing value는 space로 표시

> mydata5 <- read.csv("mydata.csv",
row.names = "id",
na.string = " ")
> mydata5
csv 파일을 읽을 때는 read.csv 함수를 이용할 수도 있으나, 덜 유연함

> mydata6 <- read.table("mydata.csv",
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ",
colClasses = c("integer", "integer", "character",
"NULL", "NULL", "integer", "integer"))
> mydata6

colClasses라는 인자를 이용하여 q1, q2 변수를 읽지 않음

colClasses에는 logical, integer, numeric, character, factor 등을 쓸 수 있으며, NULL은 읽을 때 생략한다는 의미

9.3 Reading Text Data Withing a Program

> mystring <-
"id,workshop,gender,q1,q2,q3,q4
1,1,f,1,1,5,1
2,2,f,2,1,4,1
3,1,f,2,2,4,3
4,2, ,3,1, ,3
5,1,m,4,5,2,4
6,2,m,5,4,5,5
7,1,m,5,3,4,4
8,2,m,4,5,5,5"
> mydata7 <- read.table(textConnection(mystring),
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ")
> mydata7

입력할 자료를 mystring에 저장. textConnection이란 함수가 mystring을 읽어 마치 파일처럼 만들어 read.table함수에 넘김.

> mydata8 <- read.csv(textConnection(mystring),
row.names = "id",
na.string = " ")
> mydata8
textConnection 함수와 read.csv 함수를 이용

9.4 Reading Data from the Keyboard

> id <- scan()
키보드로 자료 입력

> workshop <- scan()

키보드로 자료 입력


> gender <- scan(what = "character")

키보드로 자료 입력, 문자 입력시에는 what 인자 사용


> mydata9 <- data.frame(id, workshop, gender)
> mydata9

각 벡터를 data.frame 함수를 이용하여 합치기

9.5 Reading Fixed-Width Text Files, One Record per Case

> mydata10 <- read.fwf(file = "mydataFWF.txt",
width = c(2,-1,1,1,1,1,1),
col.names = c("id","gender", "q1", "q2", "q3", "q4"),
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

> mydata10
width = c(2,-1,1,1,1,1,1) 2컬럼 읽고, 그 다음 생략, 그 다음 1컬럼씩 5개 읽기.

fill은 라인 마지막에 공백이 필요하면 알아서 넣으라는 뜻(SAS의 missover 옵션)

strip.white는 예를 들어 "Bob "를 읽었을 때 Bob만 저장

9.5.1 Macro Substitution

> myfile <- "mydataFWF.txt"
> myVariableWidth <- c(2,-1,1,1,1,1,1)
> myVariableNames <- c("id","gender", "q1", "q2", "q3", "q4")

> mydata11 <- read.fwf(file = myfile,
width = myVariableWidth,
col.names = myVariableNames,
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

> mydata11
파일 이름, 컬럼 수와 이름을 변수에 저장하고 사용하기

9.6 Reading Fixed-Width Text Files, Two or More Records per Case

여러줄에 걸쳐 한case 자료가나올 때

> myfile <- "mydataFWF.txt"

파일 이름을 저장


> myVariable1Width <- c( 2, 1, 1,1,1,1,1)
> myVariable2Width <- c(-2,-1,-1,1,1,1,1)
> myVariableWidth <- list(myVariable1Width, myVariable2Width)

컬럼 수를 각각 저장하여 list로 결합

id, group, gender가 매 줄에 나오나 둘째 줄에서는 id, group, gender를 생략


> myVariableNames <- c("id", "group", "gender",
"q1", "q2", "q3", "q4",
"q5", "q6", "q7", "q8")

변수 이름 저장

> mydata12 <- read.fwf(file = myfile,

width = myVariableWidth,
col.names = myVariableNames,
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

> mydata12

파일을 읽고, 출력

9.7 Importing Data from SAS

9.8 Importing Data from SPSS

9.9 Exportng Data

> write.table(mydata7,
file = "mydata2.txt",
quote = FALSE,
sep = "\t",
na = " ",
row.names = TRUE,
col.names = TRUE)

mydata2.txt로 자료 출력, " 부호 안 쓰기, 값의 분리는 tab, missing value는 space, 행과 열의 이름 표시

foreign 패키지를 이용하여 자료 출력

>library("foreign")

foreign 패키지 로드


> write.foreign(mydata7,
datafile = "mydata3.txt",
codefile = "mydata.sas",
package = "SAS")
> file.show("mydata3.txt")
> file.show("mydata.sas")
mydata3.txt로 출력, SAS에서 mydata3.txt를 읽는프로그램을 mydata.sas로 출력

mydata3.txt와 mydata.sas 확인

프로그램 소스

# Chapter 9 Data Acquisition

# 9.1 The R Data Editor

mydata <- data.frame(id =0)

fix(mydata)

mydata2 <- data.frame(id = 0., workshop = 0., gender = "",
q1 = 0., q2 = 0., q3 = 0., q4 = 0.)

mydata2 <- edit(mydata2)

edit(mydata2)

mydata2 <- .Last.value

# 9.2 Reading Delimited Text Files

getwd()

setwd("c:/temp")

getwd()

mydata3 <- read.table("mydata.tab")

mydata3

mydata4 <- read.table("mydata.csv",
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ")
mydata4

mydata5 <- read.csv("mydata.csv",
row.names = "id",
na.string = " ")
mydata5

mydata6 <- read.table("mydata.csv",
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ",
colClasses = c("integer", "integer", "character",
"NULL", "NULL", "integer", "integer"))
mydata6

# 9.3 Reading Text Data Withing a Program

mystring <-
"id,workshop,gender,q1,q2,q3,q4
1,1,f,1,1,5,1
2,2,f,2,1,4,1
3,1,f,2,2,4,3
4,2, ,3,1, ,3
5,1,m,4,5,2,4
6,2,m,5,4,5,5
7,1,m,5,3,4,4
8,2,m,4,5,5,5"
mydata7 <- read.table(textConnection(mystring),
header = TRUE,
sep = ",",
row.names = "id",
na.strings = " ")
mydata7

mydata8 <- read.csv(textConnection(mystring),
row.names = "id",
na.string = " ")
mydata8

# 9.4 Reading Data from the Keyboard

id <- scan()
workshop <- scan()
gender <- scan(what = "character")
mydata9 <- data.frame(id, workshop, gender)
mydata9

# 9.5 Reading Fixed-Width Text Files, One Record per Case

mydata10 <- read.fwf(file = "mydataFWF.txt",
width = c(2,-1,1,1,1,1,1),
col.names = c("id","gender", "q1", "q2", "q3", "q4"),
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

mydata10

# 9.5.1 Macro Substitution

myfile <- "mydataFWF.txt"
myVariableWidth <- c(2,-1,1,1,1,1,1)
myVariableNames <- c("id","gender", "q1", "q2", "q3", "q4")

mydata11 <- read.fwf(file = myfile,
width = myVariableWidth,
col.names = myVariableNames,
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

mydata11

# 9.6 Reading Fixed-Width Text Files, Two or More Records per Case

myfile <- "mydataFWF.txt"
myVariable1Width <- c( 2, 1, 1,1,1,1,1)
myVariable2Width <- c(-2,-1,-1,1,1,1,1)
myVariableWidth <- list(myVariable1Width, myVariable2Width)
myVariableNames <- c("id", "group", "gender",
"q1", "q2", "q3", "q4",
"q5", "q6", "q7", "q8")

mydata12 <- read.fwf(file = myfile,
width = myVariableWidth,
col.names = myVariableNames,
row.names = "id",
na.strings = "",
fill = TRUE,
strip.white = TRUE)

mydata12

# 9.7 Importing Data from SAS

# 9.8 Importing Data from SPSS

# 9.9 Exportng Data

write.table(mydata7,
file = "mydata2.txt",
quote = FALSE,
sep = "\t",
na = " ",
row.names = TRUE,
col.names = TRUE)

library("foreign")
write.foreign(mydata7,
datafile = "mydata3.txt",
codefile = "mydata.sas",
package = "SAS")
file.show("mydata3.txt")
file.show("mydata.sas")

실행 결과

> # Chapter 9 Data Acquisition
>
> # 9.1 The R Data Editor
>
> mydata <- data.frame(id =0)
>
> fix(mydata)
>
> mydata2 <- data.frame(id = 0., workshop = 0., gender = "",
+ q1 = 0., q2 = 0., q3 = 0., q4 = 0.)
>
> mydata2 <- edit(mydata2)
>
> edit(mydata2)
>
> mydata2 <- .Last.value
>
> # 9.2 Reading Delimited Text Files
>
> getwd()
[1] "c:/temp"
>
> setwd("c:/temp")
>
> getwd()
[1] "c:/temp"
>
> mydata3 <- read.table("mydata.tab")
>
> mydata3
workshop gender q1 q2 q3 q4
1 1 f 1 1 5 1
2 2 f 2 1 4 1
3 1 f 2 2 4 3
4 2 <NA> 3 1 NA 3
5 1 m 4 5 2 4
6 2 m 5 4 5 5
7 1 m 5 3 4 4
8 2 m 4 5 5 5
>
> mydata4 <- read.table("mydata.csv",
+ header = TRUE,
+ sep = ",",
+ row.names = "id",
+ na.strings = " ")
> mydata4
workshop gender q1 q2 q3 q4
1 1 f 1 1 5 1
2 2 f 2 1 4 1
3 1 f 2 2 4 3
4 2 <NA> 3 1 NA 3
5 1 m 4 5 2 4
6 2 m 5 4 5 5
7 1 m 5 3 4 4
8 2 m 4 5 5 5
>
> mydata5 <- read.csv("mydata.csv",
+ row.names = "id",
+ na.string = " ")
> mydata5
workshop gender q1 q2 q3 q4
1 1 f 1 1 5 1
2 2 f 2 1 4 1
3 1 f 2 2 4 3
4 2 <NA> 3 1 NA 3
5 1 m 4 5 2 4
6 2 m 5 4 5 5
7 1 m 5 3 4 4
8 2 m 4 5 5 5
>
> mydata6 <- read.table("mydata.csv",
+ header = TRUE,
+ sep = ",",
+ row.names = "id",
+ na.strings = " ",
+ colClasses = c("integer", "integer", "character",
+ "NULL", "NULL", "integer", "integer"))
> mydata6
workshop gender q3 q4
1 1 f 5 1
2 2 f 4 1
3 1 f 4 3
4 2 <NA> NA 3
5 1 m 2 4
6 2 m 5 5
7 1 m 4 4
8 2 m 5 5
>
> # 9.3 Reading Text Data Withing a Program
>
> mystring <-
+ "id,workshop,gender,q1,q2,q3,q4
+ 1,1,f,1,1,5,1
+ 2,2,f,2,1,4,1
+ 3,1,f,2,2,4,3
+ 4,2, ,3,1, ,3
+ 5,1,m,4,5,2,4
+ 6,2,m,5,4,5,5
+ 7,1,m,5,3,4,4
+ 8,2,m,4,5,5,5"
> mydata7 <- read.table(textConnection(mystring),
+ header = TRUE,
+ sep = ",",
+ row.names = "id",
+ na.strings = " ")
> mydata7
workshop gender q1 q2 q3 q4
1 1 f 1 1 5 1
2 2 f 2 1 4 1
3 1 f 2 2 4 3
4 2 <NA> 3 1 NA 3
5 1 m 4 5 2 4
6 2 m 5 4 5 5
7 1 m 5 3 4 4
8 2 m 4 5 5 5
>
> mydata8 <- read.csv(textConnection(mystring),
+ row.names = "id",
+ na.string = " ")
> mydata8
workshop gender q1 q2 q3 q4
1 1 f 1 1 5 1
2 2 f 2 1 4 1
3 1 f 2 2 4 3
4 2 <NA> 3 1 NA 3
5 1 m 4 5 2 4
6 2 m 5 4 5 5
7 1 m 5 3 4 4
8 2 m 4 5 5 5
>
> # 9.4 Reading Data from the Keyboard
>
> id <- scan()
> workshop <- scan()
> gender <- scan(what = "character")
> mydata9 <- data.frame(id, workshop, gender)

> # 9.5 Reading Fixed-Width Text Files, One Record per Case
>
> mydata10 <- read.fwf(file = "mydataFWF.txt",
+ width = c(2,-1,1,1,1,1,1),
+ col.names = c("id","gender", "q1", "q2", "q3", "q4"),
+ row.names = "id",
+ na.strings = "",
+ fill = TRUE,
+ strip.white = TRUE)
>
> mydata10
gender q1 q2 q3 q4
1 f 1 1 5 1
2 f 2 1 4 1
3 f 2 2 4 3
4 <NA> 3 1 NA 3
5 m 4 5 2 4
6 m 5 4 5 5
7 m 5 3 4 4
8 m 4 5 5 5
>
> # 9.5.1 Macro Substitution
>
> myfile <- "mydataFWF.txt"
> myVariableWidth <- c(2,-1,1,1,1,1,1)
> myVariableNames <- c("id","gender", "q1", "q2", "q3", "q4")
>
> mydata11 <- read.fwf(file = myfile,
+ width = myVariableWidth,
+ col.names = myVariableNames,
+ row.names = "id",
+ na.strings = "",
+ fill = TRUE,
+ strip.white = TRUE)
>
> mydata11
gender q1 q2 q3 q4
1 f 1 1 5 1
2 f 2 1 4 1
3 f 2 2 4 3
4 <NA> 3 1 NA 3
5 m 4 5 2 4
6 m 5 4 5 5
7 m 5 3 4 4
8 m 4 5 5 5
>
> # 9.6 Reading Fixed-Width Text Files, Two or More Records per Case
>
> myfile <- "mydataFWF.txt"
> myVariable1Width <- c( 2, 1, 1,1,1,1,1)
> myVariable2Width <- c(-2,-1,-1,1,1,1,1)
> myVariableWidth <- list(myVariable1Width, myVariable2Width)
> myVariableNames <- c("id", "group", "gender",
+ "q1", "q2", "q3", "q4",
+ "q5", "q6", "q7", "q8")
>
> mydata12 <- read.fwf(file = myfile,
+ width = myVariableWidth,
+ col.names = myVariableNames,
+ row.names = "id",
+ na.strings = "",
+ fill = TRUE,
+ strip.white = TRUE)
>
> mydata12
group gender q1 q2 q3 q4 q5 q6 q7 q8
1 1 f 1 1 5 1 2 1 4 1
3 1 f 2 2 4 3 3 1 NA 3
5 1 m 4 5 2 4 5 4 5 5
7 1 m 5 3 4 4 4 5 5 5
>
> # 9.7 Importing Data from SAS
>
> # 9.8 Importing Data from SPSS
>
> # 9.9 Exportng Data
>
> write.table(mydata7,
+ file = "mydata2.txt",
+ quote = FALSE,
+ sep = "\t",
+ na = " ",
+ row.names = TRUE,
+ col.names = TRUE)
>
> library("foreign")
> write.foreign(mydata7,
+ datafile = "mydata3.txt",
+ codefile = "mydata.sas",
+ package = "SAS")
Warning messages:
1: closing unused connection 4 (mystring)
2: closing unused connection 3 (mystring)
> file.show("mydata3.txt")
> file.show("mydata.sas")
>
>

파일

1291862065_R_for_SAS_and_SPSS_Users_09.R

1291862065_mydata.zip

+ Recent posts