2012-09-01 8 views
4

약 700,000 행의 data.frame에서 작업하고 있습니다. 상태 업데이트 ID와 해당 사용자 이름이 트위터에서 포함됩니다. 나는 단지 몇 명의 사용자가 거기에 있고 얼마나 많은 시간 그들이 트위터를 찍었는지 알고 싶다. 그래서 저는 이것이 테이블을 사용하는 매우 간단한 작업이라고 생각했습니다. 그러나 내가 다른 결과를 얻고 있다는 것을 알았습니다.R 빈도 테이블에 0이 포함되어 있습니다.

최근에 나는 같은 문자로 열을 변환 한이

>freqs <- as.data.frame(table(as.character(w_dup$from_user)) 
>nrow(freqs) 
[1] 239678 

개월 전 나는이 방법으로 데이터 프레임은 주파수와 사용자 이름을 포함 것으로 나타났습니다 그

>freqs <- as.data.frame(table(w_dup$from_user) 
>nrow(freqs) 
[1] 253594 

처럼했다 0 어떻게 될 수 있습니까? 사용자 이름이 데이터 집합에있는 경우 적어도 한 번 발생해야합니다.

? 테이블이 나를 도와주지 않았습니다. 더 작은 데이터 세트에서도이 문제를 재현 할 수 없었습니다.

내가 잘못하고있는 것. 또는 나는 테이블 사용에 대한 이해를 놓치고 있습니까?

+0

제 질문에서 비슷한 오류가 발생했습니다. 제 테이블에서 제로 - 주파수 카운트 유지 (http://stackoverflow.com/q/13705060/610108)하고 싶었습니다. 'table'은 contingency 테이블을 생성하고,'tabular'는 빈도 테이블을 생성합니다. 덕분에 – ThomasH

답변

3

컬럼의 유형은 여기에 문제가 데이터 프레임을 서브 세트 때 또한 요인의 수준이 동일하게 유지 것을 명심 :

# Full data frame 
(df <- data.frame(x = letters[1:3], y = 1:3)) 
    x y 
1 a 1 
2 b 2 
3 c 3 
# Its structure - all three levels as it should be 
str(df) 
'data.frame': 3 obs. of 2 variables: 
$ x: Factor w/ 3 levels "a","b","c": 1 2 3 
$ y: int 1 2 3 
# A smaller data frame 
(newDf <- df[1:2, ]) 
    x y 
1 a 1 
2 b 2 
# But the same three levels 
str(newDf) 
'data.frame': 2 obs. of 2 variables: 
$ x: Factor w/ 3 levels "a","b","c": 1 2 
$ y: int 1 2 

그래서 첫 번째 열에는 요소가 포함되어 있습니다. 이 경우 :

table(newDf$x) 

a b c 
1 1 0 

모든 레벨 ("a","b","c")이 고려됩니다. 여기에

table(as.character(newDf$x)) 

a b 
1 1 

더 이상 요소가 아닙니다.

+0

. 이제는 문제가 레벨과 관련이 있다는 것을 알았지 만 실제로 확실하지 않습니다. 왜 내 테이블의 소스에서 발생하는 것보다 더 많은 레벨이 있는지. 나는 당신의 예제 (table (df [1 : 2, 1]))를 테이블의 일부분으로 사용하지만 나는 전체 컬럼을 사용한다. 하지만 내 df w_dup은 조사 기간 내 트윗으로 축소 된 다른 데이터 프레임의 하위 집합입니다. 레벨을 유지하고 완전히 새로운 DF를 만들 수 있습니까? – supersambo

+0

@ supersambo, 네, 그 말이 맞습니다. 나는 또한 대답을 편집했습니다. – Julius

관련 문제