2012-12-03 3 views
1

data.frame이 완전히 numeric 인 것으로 가정합니다. 첫 번째 열의 항목을 character (예 :)으로 만들면 첫 번째 열 전체가 character이됩니다.숫자에서 전체 열을 문자로 변환하는 데이터 프레임

질문 : 어떻게 바꾸어야합니까? 즉, "분명히"numeric 개체 인 data.frame 안에있는 어떤 character 개체도 강제로 numeric이되도록 만드는 방법은 무엇입니까?

MWE :

test <- data.frame(matrix(rnorm(50),10)) 
is(test[3,1]) 
test[1,1] <- "TEST" 
is(test[3,1]) 
print(test) 

그래서 여기 내 목표는 testtest[2:10]numeric 인 업무의 상태로, 지금하는 방식로부터 이동하는 것입니다. 그래서 나는 전체 data.frame에 이것을하는 함수를 요구하고 있다고 생각합니다.

+3

R 데이터 프레임의 열은 하나의 유형 만 가질 수 있으므로 "TEST"와 같이 문자열을 입력하면 해당 열 전체를 강제로 문자열로 변경해야합니다. test $ X1 <- as.numeric (test $ X1)'을 할 수는 있지만 "TEST"는 "명백하게 숫자"가 아니기 때문에 "NA"로 변환 될 것입니다. 그렇지 않으면, 데이터 프레임에 할당하기 전에 * 숫자 *인지를 확인할 수 있습니다 :'test [1, 1] <- as.numeric ("TEST")' –

답변

4

짧은 대답은 할 수 없습니다.
설명에서 언급했듯이 데이터 프레임에서 열의 모든 요소는 동일한 모드 여야합니다.

당신이 특별히있는 가치를 발견하고자하는 경우에는 다음 (vec 여기에, 말하자면, 데이터 프레임 열 것하는 경우)

vec[!is.na(as.numeric((vec)))] 

그런 다음 변환 할 수 있습니다 다음을 사용할 수 있습니다 "와 같은 번호" 하지만 불행히도 변환 된 값을 다시 같은 열에 넣을 수는 없습니다. 당신이 할, 그들은 character

숫자로 전체 dataframe을 변환 할 수있는 기능으로



다시 강제 될 수있는 바와 같이, 당신은 할 수 있습니다 (예외로 특정 항목을 분리하는 것은 불가능하다는 것을 실현) 당신은 data.frame에 형식 목록 벡터를 가질 수 있습니다 sapply

sapply(dataFrameName, as.numeric) 
+0

아니면'data.matrix (...)' – Jase

+1

물론, 숫자처럼 보이지만 사실 요소 인 열이 있다면 'data.matrix'는 예상치 못한 결과를 줄 수 있습니다 –

1

사용하고, 그것은의 다른 컬럼과 동일한 길이와 같이 목록이 한 기능을 제외한 모든 유형의 개체를 포함 할 수 있습니다 data.frame, 예 :

mydataframe <- data.frame(numbers=1:3) 
mydataframe$mylist <- list(1, 'plum', 5) 
mydataframe 
# numbers mylist 
#1  1  1 
#2  2 plum 
#3  3  5 
sapply(mydataframe, typeof) 
# numbers mylist 
#"integer" "list" 
sapply(mydataframe$mylist, typeof) 
#[1] "double" "character" "double" 
관련 문제