2010-12-01 2 views
7

.csv 파일에서 데이터를 가져 와서 데이터 세트를 첨부했습니다.
내 문제 : 하나의 변수가 정수 형식이며 295 개의 수준이 있습니다. 이 변수를 사용하여 다른 변수를 만들어야하지만 레벨을 처리하는 방법을 모르겠습니다.R 데이터 프레임의 레벨

무엇이며 어떻게 처리합니까?

+0

이것은 '레벨'의 의미에 따라 몇 가지 의미가 있습니다. 당신의 숫자가 요인 변수로 변환 된 것처럼 들리는데, 그 이유는 잘못된 형식의 숫자가 있기 때문입니다. 그래서 R은 모든 것을 범주 형 '요인'변수로 변환합니다. 정확한 코드와 오류 메시지를 잘라 붙여 넣으시겠습니까? – Spacedman

+0

'? factor'를 읽었습니까? 또는? 수준? – Marek

+0

setwd ("D :/users/me/Desktop") 데이터 <- read.csv ("Rdata.csv") 첨부 (데이터) ctr <- for (i in 1 : 4722) \t \t {as.integer (a [i]/b [i])} – user446667

답변

1

제대로 읽은 내용을 확인하는 요약 (데이터)을 수행하십시오. 열이 숫자가 아닌 경우, colClasses 인수를 read.csv로 조사하여 강제로 생성합니다. 그러면 부적절한 숫자의 NA 값이 생성됩니다.

help (read.csv)가 도움이 될 것입니다.

+0

Spacedman : colClasses를 사용할 수 있습니까? 국가 보안관을 강요 하는가? 처음에 txt <- c ("x, y, z", "1,2,3", "a, b, c", "1,2,3")로 생각했습니다. 스캔시 d <- read.table (textConnection (txt), sep = ",", header = TRUE, colClasses = rep ("numeric", 3)) 오류가 발생합니다. read.table에 누락 된 것이 있습니까? – mdsumner

+0

@mdsummer : 큰 따옴표를 제거하십시오. 그들은 당신이 의도하지 않은 방식으로 당신의 캐릭터를 묶어 놓습니다. –

+0

@mdsummer : 그러나 문제는 계속되었습니다. as.is = TRUE가 필요합니다. –

8

read.table (또는 read.csv? - 지정하지 않음)을 사용하여 데이터를 읽을 때 argumentsAsFactors = FALSE 인수를 추가하십시오. 그런 다음 문자 데이터를 가져옵니다.

열의 정수를 예상하는 경우 정수로 해석 할 수없는 데이터가 있어야하므로 읽은 후에 숫자로 변환하십시오.

txt <- c("x,y,z", "1,2,3", "a,b,c") 

d <- read.csv(textConnection(txt)) 
sapply(d, class) 
     x  y  z 
##"factor" "factor" "factor" 

## we don't want factors, but characters 
d <- read.csv(textConnection(txt), stringsAsFactors = FALSE) 
sapply(d, class) 

#   x   y   z 
#"character" "character" "character" 

## convert x to numeric, and wear NAs for non numeric data 
as.numeric(d$x) 

#[1] 1 NA 
#Warning message: 
#NAs introduced by coercion 

마지막으로 이러한 입력 세부 정보를 무시하고 요소 사용에서 정수 수준을 추출하려는 경우. ? 요소의 "경고"에 따라 as.numeric (수준 (d $ x)) [d $ x]. ! 나는 당신이 read.table와 헤더 = TRUE, stringAsFactors = FALSE로 읽기 문을 다시 실행하고 as.is 제안 당신의 설명에서 근무

+0

연습을 보내 주셔서 감사합니다! –

4

= stringsAsFactors 및 9월 = ","

datinp <- read.table("Rdata.csv", header=TRUE, stringAsFactors=FALSE , 
         as.is = !stringsAsFactors , sep=",") 
datinp$a <- as.numeric(datinp$a) 
datinp$b <- as.numeric(datinp$b) 
datinp$ctr <- with(datinp, as.integer(a/b)) # no loop needed when using vector arithmetic 
5

또는 간단히 사용할 수 있습니다

d$x2 = as.numeric(as.character(d$x)).