데이터 > 활성 데이터셋이 있는 변수 관리하기 > 데이터셋에서 변수 지우기...

Data > Manage variables in active data set > delete variables from data set...

 

Linux 사례 (Ubuntu 18.04)

 

잘못 작업된 변수 또는 분석에 필요없는 변수를 삭제하는 기능이다. 삭제하고자 하는 변수를 선택하고 예(OK) 버튼을 누른다.

 

Linux 사례 (Ubuntu 18.04)

삭제하기전에 다시 한번 확인하는 질문을 받는다. 예(OK) 버튼을 누른다.

Linux 사례 (Ubuntu 18.04)

출력창에 아래와 같은 명령문의 내용을 보게 될 것이다. 알림글에는 2개의 변수가 삭제되었음을 알리는 주석이 등장한다.

 

데이터셋 <- within(데이터셋, {삭제될변수 <- NULL })


?NULL  # base 패키지의 NULL 도움말 보기

is.null(list())     # FALSE (on purpose!)
is.null(pairlist()) # TRUE
is.null(integer(0)) # FALSE
is.null(logical(0)) # FALSE
as.null(list(a = 1, b = "c"))

데이터 > 활성 데이터셋의 변수 관리하기 > 변수이름 다시 짓기...
Data > Manage variables in active dataset > Rename variables...

Linux 사례 (MX 21)


변수의 이름을 바꿔야할 때 사용하는 기능이다. 이름을 바꿀 변수를 선택하고 예(OK) 단추를 누르면, 다음 창이 뜨는데 여기에서 생각한 새로운 변수 이름을 입력하면 된다.

Linux 사례 (MX 21)

 

Linux 사례 (MX 21)

names(데이터셋이름)[변수번호] <- c("새로운변수이름1", "새로운변수이름2", "새로운변수이름3") 등으로 함수가 사용된다.

names(Prestige)[c(1, 2, 4)] <- c("교육연수", "수입", "직업권위")

Linux 사례 (MX 21)

R Commander 화면에서 <데이터셋 보기> 버튼을 누르면, 다음과 같이 변수 이름이 바뀐 데이터셋 정보를 보게된다.

Linux 사례 (MX 21)


?names  # base 패키지의 names 도움말 보기

# print the names attribute of the islands data set
names(islands)

# remove the names attribute
names(islands) <- NULL
islands
rm(islands) # remove the copy made

z <- list(a = 1, b = "c", c = 1:3)
names(z)
# change just the name of the third element.
names(z)[3] <- "c2"
z

z <- 1:3
names(z)
## assign just one name
names(z)[2] <- "b"
z

데이터 > 활성 데이터셋의 변수 관리하기 > 수치 변수 구간만들기...
Data > Manage variables in active data set > Bin a numeric variable...

Linux 사례 (MX 21)


수치 변수를 촘촘히 연결된 연속형 변수라고 생각해보자. 선 그래프로 시각화 할 수 있을 것이다. 연속적인 값들을 구간으로 나누어 쪼개어 배치하는 기법이 필요할 수 있다. 흔히 연령을 연령대로 만드는 작업이 이것에 속한다.

구간을 만드는 작업창에는 몇 몇 검토 사항의 조건들을 묻는 내용이 있다.
1. 몇 개의 구간을 만들 것인가?
2. 구간 수준의 이름을 어떻게 정할 것인가?
3. 구간화 작업을 넓이로, 계산치로, 군집화로 할 것인가?

몇 개의 구간을 만들 것인가라는 질문에 답을 결정하려면, 아마도 이 수치형 변수의 요약적 특징을 미리 알고 있어야 할 것이다. 그리고, 구간화 작업에서 동일-넓이 구간이 기본 선택사항인데, 다른 선택을 하려면, 데이터에 대한 이해와 높은 분석적 통찰력이 요구될 것이다.

carData 패키지에 있는 Prestige 데이터셋의 수입(연봉)을 뜻하는 income 변수를 구간으로 쪼개자. income 변수는 수치형 변수이다. 102개의 income 변수의 사례 요약은 다음과 같다:

Linux 사례 (MX 21)

income.bin1, income.bin2, income.bin3 등 세개의 income 변수 구간화 작업을 하자. 구간의 수는 3개로, 수준 이름은 lower, middle, upper로 정하자. 구간화 기법은 bin1은 동일-넓이 구간, bin2는 동일-계산치 구간, bin3는 Natural breaks(K-평균 군집화에서)을 각각 선택하자.

Linux 사례 (MX 21)
Linux 사례 (MX 21)

아래 출력창에서 각각의 구간화 인자 method와 세 변수의 요인 갯수를 살펴보라.

Linux 사례 (MX 21)

<데이터셋 보기> 버튼을 눌러 Prestige 데이터셋에서 income.bin1, income.bin2, income.bin3의 요인들을 살펴보라.

Linux 사례(MX 21)


?binVariable  # RcmdrMisc 패키지에서 binVariable 도움말 보기

summary(binVariable(rnorm(100), method="prop", labels=letters[1:4]))

데이터 > 활성 데이터셋의 변수 관리하기 > 수치 변수를 요인으로 변환하기...
Data > Manage variables in active data set > Convert numeric variable to factor...

Windows 사례


수치 변수를 요인으로 전환해야 하는 경우가 흔하다. 남성을 1, 여성을 2로 입력한 엑셀 자료를 불러오는 경우, 1과 2를 요인으로 재지정해야 남성, 여성의 의미를 담은 변수로 활용할 수 있다. 일반적으로 이런 변수를 명목변수(nominal variable)이라고 하지만, R에서는 factor (variable)로 부른다. 간혹 요인분석에 익숙한 사용자가 factor와 factor analysis를 헷갈려하는 경우가 있기도 하다.

수치 변수인가? 요인 인가? 변수의 유형에 대한 이해가 필요한 이유는 실용적으로 볼 때, 시각화와 연결된 작업때문이다. 줄여 말하면, 수치 변수로 표현할 수 있는 시각화와 요인으로 표현할 시각화 기법이 다르다고 할 수 있다. 어려운가? 간단히 예를 들면, 히스토그램은 수치 변수의 시각화 기법이다. 그러나, 막대 차트는 요인의 시각화 기법이다. 수치 변수는 더할 수 있고, 요인은 셀 수 있다.

먼저 datasets 패키지에 있는 airquality 데이터셋을 활성화시키자.

https://rcmdr.tistory.com/100

 

airquality 데이터셋 요약 정보

R이 시작될 때, datasets 패키지가 자동으로 호출된다. 따라서 R Commander를 실행할 때, datasets 패키지는 첨부 패키지화되어 메뉴창을 통해서 내부 데이터셋을 찾고 불러올 수 있다. 메뉴창에서 순서

rcmdr.kr


작업창에는 '다중 변수를 위한 새로운 변수 이름 또는 접미사: <변수와 똑같음>' 이라는 조건입력칸이 있다. 변수 이름을 덮어쓰면서, 바뀐 변수 유형을 기억하기도 하지만, 나는 흔히 _f를 추가한다. 원래의 수치 변수 옆에 _f가 붙어있는 요인을 만들어 그 차이를 기억하는 방식이다.

Linux 사례 (MX 21)

데이터셋 <- with(데이터셋, {요인형변수이름 <- as.factor(수치형변수) })

airquality <- within(airquality, { month.f <- as.factor(Month) })


참고로, 간혹 다음의 오류 지시문 "수준의 숫자 ( ) (이)가 너무 넓습니다"이 아래 알림글에 나올 수 있다. 이것은 요인화로 만들어지는 수준의 갯수가 너무 많다는 의미이다. 그래서 요인 수준 이름을 일일이 넣을 추가 작업창을 R Commander에서 만들 수 없다는 뜻이다. 작업창의 요인 수준에서 "수준 이름 사용하기"를 선택 (기본선택사항)해서 이와 같은 오류 지시문이 나오는 경우, 그 아래에 있는 "숫자 사용하기" 선택을 하면 된다.

아래 출력창에서 airquality 데이터셋의 Month 변수와 month.f 변수를 비교해보자. Month 변수는 수치형 변수로서 최소, 평균, 최대 값을 갖고 있는 반면에, month.f 변수는 5에 31, 7에 31, 9에 30 등의 갯수를 갖고 있다.

Linux 사례 (MX 21)


?factor  # base 패키지의 factor 도움말 보기

(ff <- factor(substring("statistics", 1:10, 1:10), levels = letters))
as.integer(ff)      # the internal codes
(f. <- factor(ff))  # drops the levels that do not occur
ff[, drop = TRUE]   # the same, more transparently

factor(letters[1:20], labels = "letter")

class(ordered(4:1)) # "ordered", inheriting from "factor"
z <- factor(LETTERS[3:1], ordered = TRUE)
## and "relational" methods work:
stopifnot(sort(z)[c(1,3)] == range(z), min(z) < max(z))


## suppose you want "NA" as a level, and to allow missing values.
(x <- factor(c(1, 2, NA), exclude = NULL))
is.na(x)[2] <- TRUE
x  # [1] 1    <NA> <NA>
is.na(x)
# [1] FALSE  TRUE FALSE

## More rational, since R 3.4.0 :
factor(c(1:2, NA), exclude =  "" ) # keeps <NA> , as
factor(c(1:2, NA), exclude = NULL) # always did
## exclude = <character>
z # ordered levels 'A < B < C'
factor(z, exclude = "C") # does exclude
factor(z, exclude = "B") # ditto

## Now, labels maybe duplicated:
## factor() with duplicated labels allowing to "merge levels"
x <- c("Man", "Male", "Man", "Lady", "Female")
## Map from 4 different values to only two levels:
(xf <- factor(x, levels = c("Male", "Man" , "Lady",   "Female"),
                 labels = c("Male", "Male", "Female", "Female")))
#> [1] Male   Male   Male   Female Female
#> Levels: Male Female

## Using addNA()
Month <- airquality$Month
table(addNA(Month))
table(addNA(Month, ifany = TRUE))

'Data > Manage variables in active data set' 카테고리의 다른 글

11. Rename variables...  (0) 2020.03.21
7. Bin a numeric variable...  (0) 2020.03.21
4. Standardize variables...  (0) 2019.09.08
3. Add observation number to data set  (0) 2019.09.08
2. Compute new variable...  (0) 2019.09.08

데이터 > 활성 데이터셋의 변수 관리하기 > 변수 표준화하기...
Data > Manage variables in active data set > Standardize variables...

Linux 사례 (Ubuntu 18.04)


활성데이터셋에 있는 수치형 변수들은 서로 다른 기준의 값들을 가질 것이다. 정수형 값도 있을 수 있다. 크기도 다를 수 있다. 만약 크기와 기준이 다른 수치형 변수들을 결합해서 분석 작업을 진행할 경우, 영향력 순위를 확인하는데 불편할 수 있다.

예를 들어서, 시험과목 중에서 어느 것이 난이도가 높은가를 알려면 평균점수를 확인할 것이고, 같은 점수라 하더라도 어느 과목점수가 더 높은가를 확인하려면, 이른바 상대평가를 하려면 척도 계산을 해야할 것이다. 변수 표준화하기는 척도 함수를 사용하여 상대화된 기준으로 사례 값을 재조정하는 기능이다. 대화창에서 수치형 변수를 선택하고 변수를 표준화하면, 기존의 변수명 앞에 Z가 붙는, Z.변수라는 새로운 표준화 값을 갖는 변수가 생성된다.

Prestige 데이터셋에서 교육연수(education)와 수입(income)이 직업의 권위에 대한 사회적 인식(prestige)에 어떤 영향을 미치는가에 대한 문제의식에 대한 통계학적 접근을 위하여 세개의 수치형 변수를 표준화하려고 한다.

Linux 사례 (Ubuntu 18.04)

 

Prestige <- local({
  .Z <- scale(Prestige[,c("education","income","prestige")])
  within(Prestige, {
    Z.prestige <- .Z[,3]
    Z.income <- .Z[,2]
    Z.education <- .Z[,1] 
  })
})

R Commander에 있는 <데이터셋 보기> 버튼을 눌러 Prestige 데이터셋의 내부를 살펴보자. Z.prestige, Z.income, Z.education 이라는 세개의 변수가 생성되었음을 알 수 있다.

Linux 사례 (Ubuntu 18.04)


?scale  # base 패키지의 scale 도움말 보기

require(stats)
x <- matrix(1:10, ncol = 2)
(centered.x <- scale(x, scale = FALSE))
cov(centered.scaled.x <- scale(x)) # all 1

'Data > Manage variables in active data set' 카테고리의 다른 글

7. Bin a numeric variable...  (0) 2020.03.21
5. Convert numeric variable to factor...  (0) 2020.03.18
3. Add observation number to data set  (0) 2019.09.08
2. Compute new variable...  (0) 2019.09.08
1. Recode variables...  (0) 2019.09.08

데이터 > 활성 데이터셋에 있는 변수 관리하기 > 관찰 수를 데이터셋에 더하기
Data > Manage variables in active data set > Add observation number to data set

Linux 사례 (Ubuntu 18.04)

데이터프레임 형식의 데이터셋은 행과 열로 구성된다. 1부터 행의 길이에 해당되는 값을 일련번호 식으로 맨 앞부터 붙인 사례값을 가진 변수를 만드는 기능이다. 변수이름은 ObsNumber로 자동 정해진다.

Prestige$ObsNumber <- 1:102


이렇게 일련번호를 가진 변수(ObsNumber)는 어떻게 활용될 수 있을까. 특정 사례(행)에 지정된 고유값을 변수로 전환하고, $ObsNumber를 행의 고유값으로 사용할 수도 있다. 이 작업은 데이터셋을 .csv, .txt 등으로 내보낼 때 활용되기도 한다.

Linux 사례 (Ubuntu 18.04)

'Data > Manage variables in active data set' 카테고리의 다른 글

7. Bin a numeric variable...  (0) 2020.03.21
5. Convert numeric variable to factor...  (0) 2020.03.18
4. Standardize variables...  (0) 2019.09.08
2. Compute new variable...  (0) 2019.09.08
1. Recode variables...  (0) 2019.09.08

데이터 > 활성 데이터셋의 변수 관리하기 > 새로운 변수 계산하기...

Data > Manage variables in active data set > Compute new variable...

 

Linux 사례 (Ubuntu 18.04)

 

활성 데이터셋에 있는 변수들을 활용하여 새로운 변수를 생성하는 많은 방법이 있다. <Compute new variable...>은 일반적으로 수치형 사례를 갖고 있는 변수(들)을 사칙연산, log, 제곱근 등의 계산기법을 활용하여 새롭게 만드는 것이다. 계산에 의해서 새롭게 생성되는 사례들을 새로운 변수이름으로 저장할 수 있다. variable 이라는 추천된 변수 이름이 있지만, 사용자가 직접 지정할 수 있다.

 

Prestige 데이터셋에 있는 income 변수를 log를 이용하여 변환해보자. 

Linux 사례 (Ubuntu 18.04)

다음과 같은 명령문으로, income.log라는 변수가 새롭게 생성된다.

Prestige$income.log <- with(Prestige, log(income))

?Compute  # Rcmdr 패키지에서 Compute 도움말 보기

'Data > Manage variables in active data set' 카테고리의 다른 글

7. Bin a numeric variable...  (0) 2020.03.21
5. Convert numeric variable to factor...  (0) 2020.03.18
4. Standardize variables...  (0) 2019.09.08
3. Add observation number to data set  (0) 2019.09.08
1. Recode variables...  (0) 2019.09.08

데이터 > 활성 데이터셋의 변수 관리하기 > 변수를 다시 코딩하기...

Data > Manage variables in active data set > Recode variables...

 

Linux 사례 (Ubuntu 18.04)

 

기존 변수를 이용하여 새로운 변수를 만들 수 있다. R Commander에서 이 기능은 일반적으로 수치형 변수를 요인형으로 바꾸는데 사용된다. <(각각의) 새로운 변수를 요인으로 만들기>에 선택이 되어 있는 것은 요인형으로 만드는 과정이다.

 

물론 수치형 변수의 사례값들을 다른 값으로 변환시킬수도 있다. 이 기능을 이해하기 위해서는 <"다시 코딩하기" 지시문 입력하기>에 대한 정확한 사용법을 익히는 것이 필수적이다. 초보자에게는 쉽지 않다. 하지만, 논리적으로 이해한다면 차후에 큰 어려움은 없을 것이다.

 

Linux 사례 (Ubuntu 18.04)

 

예를 들어 연령과 같은 수치 정보를 담은 변수가 있다고 하자.

10세 구간으로 바꾸려고 할 때, 10대, 20대, 30대, 40대, 50대, 60대, 70대 이상 등으로 사용할 수 있다. 때로는 65세이상으로 마지막 구간을 사용할 수 있다. 태어난 후 10세가 아닌 아이들을 배제시키기도 한다. 선거와 같은 정치적인 이슈에 대한 입장에서 20대 이상부터 시작하기도 한다. 이 경우 수치형 정보를 구간으로 바꾸어 요인화 시키는 과정이 필요하다.

 

때로는 소득과 관련하여 상-중-하 등의 3구간으로 나누는 것도 흔하다. 아래의 예와 같이 사용할 수 있다.

1:10000 = "low"

10001:20000 = "middle"

20001:max(데이터셋$변수) = "high" 

else = NA

 

Prestige 데이터셋에 있는 수치형 변수 education의 구간을 만들어 사례값들을 넣고 요인형로 변수로 만들고자 한다. 아래와 같이 <'다시 코딩하기' 지시문 입력하기>에 입력할 수 있다. 1부터 6까지는 elementary로, 6.01에서 9까지는 middle로 , 9.01에서 12까지는 high로, 12.01에서 16까지 univ라는 구간명을 만들어 넣을 수 있다.

Linux 사례 (Ubuntu 18.04)

주의점으로, '다시코딩하기'지시문에 오직 큰 따옴표(" ")를 사용해야 한다. 작은 따옴표를 사용하면 알림글에 오류가 뜬다:  오류: '다시코딩하기'지시문에 오직 큰 따옴표(" ") 사용하기

 

Prestige 데이터셋에 있는 수치형 변수 education, income을 구간을 정해서 나누고 요인형으로 바꿔서 education.level, income.level 이라고 변수명을 만든 명령문의 출력 결과이다. 

Linux 사례 (Ubuntu 18.04)


?RecodeDialog  # Rcmdr 패키지에서 RecodeDialog 도움말 보기

변수 다시 코딩하기 사례:  https://rcmdr.tistory.com/157

 

1. Single-sample proportion test...

통계 > 비율 > 일-표본 비율 검정... Statistics > Proportions > Single-sample proportion test... 요인형 변수를 두개 이상 가지고 있는 데이터셋이 활성화되어 있다면, '통계 > 비율 > 이-표본 비율 검정..'..

rcmdr.kr

 

데이터 > 활성 데이터셋 > 활성 데이터셋 내보내기...

Data > Active data set > Export active data set...

 

작업을 마친/ 또는 다른 업무를 위하여 일시적으로 작업한 자료를 하드디스크에 저장하는 경우가 흔하다. .RData로 자료를 저장할 수 있고, 공동작업자와 공유할 수 있지만, 행여 R을 사용하지 않는 분석가/사용자에게 자료를 보내야 하는 경우가 있다. 이 때 사용하는 기능이다.

 

Linux 사례 (MX 21)

 

자료를 텍스트 형식으로 저장하는 경우 다른 도구 사용자(예, 엑셀, PSPP 등)가 쉽게 불러와서 추가 작업을 할 수 있을 것이다. 변수, 행, 문자 등에 대하여 지정하는 옵션이 있다. 결측값 표현 방식도 정할 수 있다. 중요한 것은 필드 구분자이다. 쉼표(,)를 기준으로하는 필드는 .csv로 파일이 저장되고, 여백-탭-세미콜론 등으로 필드 구분자를 지정하면 .txt로 저장된다.

 

Linux 사례 (Ubuntu 18.04)
Linux 사례 (Ubuntu 18.04)

쉼표(',')를 필드 구분자로 사용하는 경우, 내보내는 데이터셋의 확장자는 .csv로 저장된다.

Linux 사례 (Ubuntu 18.04)
Linux 사례 (Ubuntu 18.04)

write.table()  함수를 사용한다.

write.table(활성데이터셋, "경로/파일이름.확장자, sep="필드구분자", col.names=, row.names=, quote=, na="결측치표시") 

신경써야 할 것이 하나 더 있다. 대화창에는 등장하지 않지만, 현재 작업하는 컴퓨터의 인코딩 방식으로 자료가 내보내진다. 이 경우 윈도우-맥 애플-리눅스 등의 이기종간 자료 교환에는 인코딩 호환 문제가 발생할 수 있다. Linux는 utf-8, Windows는 cp949를 기본 인코딩으로 사용한다.

write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")

또 하나, 불편한 점이 있다. <행 이름 쓰기>와 관련된 것이다. <행 이름 쓰기>를 하고 저장한 파일에는 변수이름이 한자리 앞으로 오는 문제가 있다. 행 이름 위의 빈 칸에 첫 변수 이름이 쓰여지기 때문이다. 엑셀이나 다른 도구에서 행 이름 위에 있는 변수 이름을 이동시켜야 하는 불편함이 있다. 그렇다고 행 이름을 안쓰는 것도 문제가 될 수 있다. 일련번호는 상관없겠으나 사례 이름이 삭제되면 정보량이 축소되기 때문이다. 그래서 사례이름을 추가적인 변수명으로 사용하는 꼼수가 흔한 상황이다. 

 


?write.table  # utils 패키지의 write.table 도움말 보기

## Not run: 
## To write a CSV file for input to Excel one might use
x <- data.frame(a = I("a \" quote"), b = pi)
write.table(x, file = "foo.csv", sep = ",", col.names = NA,
            qmethod = "double")
## and to read this file back into R one needs
read.table("foo.csv", header = TRUE, sep = ",", row.names = 1)
## NB: you do need to specify a separator if qmethod = "double".

### Alternatively
write.csv(x, file = "foo.csv")
read.csv("foo.csv", row.names = 1)
## or without row names
write.csv(x, file = "foo.csv", row.names = FALSE)
read.csv("foo.csv")

## To write a file in Mac Roman for simple use in Mac Excel 2004/8
write.csv(x, file = "foo.csv", fileEncoding = "macroman")
## or for Windows Excel 2007/10
write.csv(x, file = "foo.csv", fileEncoding = "UTF-16LE")

## End(Not run)

데이터 > 활성 데이터셋 > 활성 데이터셋 저장하기...
Data > Active data set > Save active data set...

Linux 사례 (MX 21)


활성데이터셋을 저장하는 기능이다. 데이터셋과 관련된 여러 작업(하위셋, 결측자료 제거, 누적/합계 등으로 데이터셋 변형 등)을 마친 후 사용하게된다. 대화창에서 저장위치를 결정하고 이름을 정한다. 확장자는 .RData 이다.

Linux 사례 (Ubuntu 18.04)

save() 함수를 사용한다. Linux 환경에서는아래화면처럼 경로명을 사용한다.
save("활성데이터셋이름", file="경로/Prestige.RData")

save(..., list = character(),
     file = stop("'file' must be specified"),
     ascii = FALSE, version = NULL, envir = parent.frame(),
     compress = isTRUE(!ascii), compression_level,
     eval.promises = TRUE, precheck = TRUE)

Linux 사례 (Ubuntu 18.04)


?save  # base 패키지의 save 도움말 보기

x <- stats::runif(20)
y <- list(a = 1, b = TRUE, c = "oops")
save(x, y, file = "xy.RData")
save.image() # creating ".RData" in current working directory
unlink("xy.RData")

# set save defaults using option:
options(save.defaults = list(ascii = TRUE, safe = FALSE))
save.image() # creating ".RData"
if(interactive()) withAutoprint({
   file.info(".RData")
   readLines(".RData", n = 7) # first 7 lines; first starts w/ "RDA"..
})
unlink(".RData")

+ Recent posts