2015-01-11 4 views
0

다른 클래스의 클래스 유형에 영향을주지 않고 데이터 프레임에 문자 클래스 벡터를 추가하고 싶습니다. 는 예를 들어, dataframe mtcars는 열의 숫자 유형으로 구성 나는이 같은 추가 열을 추가하는 경우 선택한 데이터 프레임 열을 다른 클래스로 변환

m <- mtcars 
col <- rownames(mtcars) 
m <- data.frame(m, col) 

은 모든 열 원래 숫자 클래스는 문자 클래스로 변환됩니다. 왜 이런 일이 일어나는 걸까요? 이것을 피할 수있는 방법이 있습니까? col 열을 추가 한 후에 각 열을 해당 클래스로 다시 변환해도 상관 없습니다. 어떻게 처리할까요?

enter image description here

+2

은 당신이보고있는 것은 mtcars 경우 발생 될 수를 매트릭스 였지만 그것이 데이터 프레임이라면 그렇지 않았습니다. –

+0

그냥 분명히; 데이터 프레임'm'의 클래스를 결정하기 위해'apply (m, 2, class)'를 사용합니다. 이것을'col'을 추가 한 후'm'에 적용하면 모든 컬럼에 대해 'character'가 반환됩니다. 'cbind()'를 사용한 후에도 같은 결과가 반환되었습니다. R의 다른 설정 문제 일 수 있습니까? – Wolfgang

+0

'class (m)'에 따르면'col'을 추가하기 전과 후에 모두 "data.frame"을 반환합니다. – Wolfgang

답변

1

귀하의 예제 코드는 m의 기존 컬럼의 클래스를 변경하지 마십시오. 주석에서 언급했듯이 객체는 매트릭스 (모든 열에 대해 상수 클래스가 필요함)이며 데이터 프레임은 아닙니다 (이 요구 사항이 없음).

당신의 (a dataframe의) 컬럼의 서브 세트의 클래스를 변경 일괄하려는 경우, 당신은 다음과 같은 작업을 수행 할 수 말했다

:

m[1:11] <- lapply(m[1:11], as.numeric) 
+0

나는 그것을하지 말아야한다는 것을 알고 있습니다. 나는'class (m)'을 수행하고'col'의 추가 전과 후에 모두 "data.frame"으로 리턴합니다. – Wolfgang

+0

나는 또한 귀하의 코드를 시도하고 모든 열은 여전히 ​​"문자"로 있었다. – Wolfgang

+0

@ Wolfgang - 내 질문에 대한 귀하의 의견을 참조하십시오. – jbaums

관련 문제