문제

다음 스크립트를 실행하고 있습니다.

cause = c(1, 1, 1, 1, 1, 2, 1, 2, 2, 2, 2); 
time =  c(1, 1, 2, 3, 3, 2, 2, 1, 1, 2, 2); 
table(cause, time)

그리고 나는 다음을 얻는다 :

    time
cause 1 2 3
    1 2 2 2
    2 2 3 0

내가 원하는 것은 이것입니다 :

      time
cause     1 2 3
Maltreat  2 2 2
Non-Maltr 2 3 0

그래서 내 질문은 : r의 테이블 행의 이름을 어떻게 바꾸는가?

같은 맥락에서 그 테이블의 열의 이름을 어떻게 바꾸겠습니까?

도움이 되었습니까?

해결책

이를 수행하는 한 가지 방법은 인덱스 대신 문자열의 요인이나 목록을 사용하는 것입니다. 그래서:

cause1 <- c("Maltreat", "Non-malt")[cause]

> print(cause1)
 [1] "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Maltreat" "Non-malt"
 [7] "Maltreat" "Non-malt" "Non-malt" "Non-malt" "Non-malt"

> table(cause1, time)
          time
cause1     1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

그리고 메모리 나 속도에 대해 걱정하는 경우, R은 전체 문자열의 단일 인스턴스만이 저장되고 나머지는 인덱스로 완료되면서 내부적으로 이런 종류의 것을 효율적으로 표현하는 데 능숙합니다.

덧붙여서, 당신은 데이터 프레임으로 장기적으로 더 행복 할 것입니다.

> df <- data.frame(cause=as.factor(c("Maltreat", "Non-malt")[cause]), time=time)
> summary(df)
      cause        time      
 Maltreat:6   Min.   :1.000  
 Non-malt:5   1st Qu.:1.000  
              Median :2.000  
              Mean   :1.818  
              3rd Qu.:2.000  
              Max.   :3.000  
> table(df)
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

다른 팁

이 작업을 수행하는 두 가지 쉬운 방법이 있습니다.

z <- table(cause, time)

colnames/rownames 함수 사용 :

> colnames(z)
[1] "1" "2" "3"
> rownames(z)
[1] "1" "2"

또는 Dimnames 사용 :

> dimnames(z)
$cause
[1] "1" "2"
$time
[1] "1" "2" "3"
> dimnames(z)$cause
[1] "1" "2"

어쨌든 이름을 벡터로 선택하고 할당하십시오.

> dimnames(z)$cause <- c("Maltreat","Non-malt")
> z
          time
cause      1 2 3
  Maltreat 2 2 2
  Non-malt 2 3 0

Plyr의 멋진 "Revalue"와 "Rename"명령을 잊지 마십시오!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top