2012-01-15 2 views
2

큰 데이터 프레임을 가지고 있으며 모든 가변 변수를 도표로 만들고 싶습니다. 테이블()와 xtabs() 모두이 작업을 수행하지만, 문제는 :R - xtabs() 대 table() : 수준을 드롭하고 변수 이름을 정의합니까?

  1. xtabs는() 제가 필요하지 않은 변수 수준을 드롭 할 수 있지만 나를 차원의 이름을 정의 을 허용하지 않습니다
  2. table()을 사용하면 차원 이름을 정의 할 수 있지만 사용되지 않은 수준은 삭제할 수 없습니다.

dimensionnames를 정의해야하는 이유는 모든 것이 for-loop 내에서 발생한다는 것입니다. (왜냐하면 모든 사람이 모두를해야하기 때문입니다.) 이것은 의미없는 이름을 렌더링합니다. 다음은 의미하는 바를 보여주는 '간단한'예입니다.

var.3=factor(rep(c("m","f","t"), c(5,5,2))) 
df <- data.frame(var.1=rep(1:4, 1:4), var.2=rep(c("A","B"), 5), var3=var.3[1:10]) 
levels(df[,3])   # the "t" level is not in the df! 
tabs.list<- list() 
xtabs.list<- list() 
for (i in 1:(ncol(df)-1)){ 
    for (j in (i+1):ncol(df)) { 
    tabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     table(df[,i],df[,j], dnn=list(colnames(df)[i], colnames(df)[j])) 
    xtabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     xtabs(~df[,i]+df[,j], drop.unused.levels=TRUE) 
    } 
} 
tabs.list 
xtabs.list 
#What I want: 
for (i in 1:length(xtabs.list)){ 
names(dimnames(xtabs.list[[i]])) <- names(dimnames(tabs.list[[i]])) 
} 
xtabs.list 

데이터를 크로스 스 크라이 싱하는 두 가지 기능에는 각각 내가 사용하고 싶은 옵션이 있습니다. 왜 둘 다 할 수 없습니까?

답변

2

그것은 as.character

tabs.list<- list() 
for (i in 1:(ncol(df)-1)){ 
    for (j in (i+1):ncol(df)) { 
     tabs.list[[paste(sep=" ", colnames(df)[i], "by",colnames(df)[j])]] <- 
     table(as.character(df[,i]), 
       as.character(df[,j]), 
       dnn=list(colnames(df)[i], colnames(df)[j])) 
           } 
          } 
tabs.list 
+0

아 코스에 포장하여 "드 인수 분해"인수 꽤 간단합니다. 수준을 떨어 뜨리는 것은 모두 요인에 관한 것입니다. 그 Dwin에게 감사드립니다! – maja