2013-01-18 3 views
0

데이터 프레임을 만들려면 다음과 같이하십시오. 내 문제는 데이터 프레임 행 이름이 1,2,3,4 등 대신 [1,], [2,], [3,], [4] 등으로 표시된다는 것입니다 (출력은 아래 참조) . 왜 그리고 어떻게하면 행 이름이 평소와 같이 표시되게 할 수 있습니까?R 데이터 프레임 행 이름이 숫자 값 대신 매트릭스를 표시합니다.

Code: 

df <- data.frame(id=c("id"),nobs=c("nobs")) 
df <- cbind(id,nobs) 
df 

ID 및 NOBS가 두 번째 명령은 완전히 제를 덮어

Current output: 
    id nobs 
[1,] 2 3653 
[2,] 4 3653 
[3,] 8 1462 
[4,] 10 1097 
[5,] 12 732 

Desired output: 
    id nobs 
1 2 3653 
2 4 3653 
3 8 1462 
4 10 1097 
5 12 732 

답변

0

참고 : 이러한 방법 중 하나를 사용하지 않는 것이 좋습니다. data.frame을 원하면 Paul이 보여준 것처럼 직접 만들 수 있습니다 (또는 자신이 완료 한 것). 이것은 단지 이것이 일어나는 이유를 설명하기위한 것입니다. 예를 들어 sapply을 사용하는 경우가 있지만, 출력은 행렬이 될 수 있지만 2 개의 행렬을 바인딩하고 data.frame으로 지정할 수 있습니다. cbind (?cbind)의 도움말 페이지에서

:

기능이 cbind rbind 및 데이터 프레임에 대한 방법으로, S3는 일반적이다. 적어도 하나의 인수가 데이터 프레임이고 나머지는 벡터 또는 행렬이면 데이터 프레임 방법이 사용됩니다. cbind 데이터 프레임을위한 방법 data.frame 단지 래퍼

데이터 프레임 방식

(..., check.names = FALSE). 즉, 데이터 프레임 인수에서 행렬 열을 분할하고 stringsAsFactors = FALSE가 지정되지 않은 경우 문자 열을 인수로 변환합니다.

따라서 두 벡터를 전달하면 data.frame의 래퍼는 호출되지 않습니다. 따라서 행렬을 얻습니다.

무엇을 할 수 있습니까?
1) 작성하고 적어도 하나의data.frame 인수)
에는 as.data.frame(.)cbind 인수를 마무리 전달할 수 있습니다. data.frame '()의 사용을 권유

x <- 1:5 
y <- 6:10 
> cbind(data.frame(x), y) 
    x y 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 

> as.data.frame(cbind(x,y)) 
    x y 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 
+0

Arun에게 감사드립니다! 이것은 도움이되었다. 저는 R에 익숙하지 않습니다. 이제는 내장 된 도움말이 실제로 유용하다는 것을 알게되었습니다. 나는 그것을 의심했지만 확실하지 않았습니다. 또한, 내가하지 않으면 미안해. –

4

5 개 수치 각각 두 벡터 ...이다. 당신이 원하는 것은 cbind로 입력 이후

df <- data.frame(id=id, nobs=nobs) 

은 벡터 (나는 가정), 다음 기본적으로이 행렬을 반환하는 것입니다.

또한 당신은

df <- data.frame(cbind(id, nobs)) 

를 통해 데이터 프레임으로 강제 할 수 있지만이 과잉이다.

+1

+1'직접. 너무 많은 사람들이'cbind '를 사용하여 필요하지 않을 때 데이터 프레임을 생성하는 소용돌이에 빠져 일반적으로 문제를 야기합니다. – joran

+0

폴 감사합니다. 그게 효과가 있었고 이제는 더 잘 이해합니다. 또한, 내가 선택한 답변을하지 않은 경우 미안 해요. 나는 Arun에게서 처음 보았던 것과 함께 갔다. –

관련 문제