2017-12-09 3 views
0

거대한 데이터 프레임을 가지고 있습니다 (huge라고 부릅니다). 행 번호별로 두 개로 나누고 싶습니다. 그러나, 내가하는 방식으로 결과 하위 집합을 데이터 프레임 대신 큰 요인으로 만듭니다.r - 데이터 셋을 서브 셋팅하면 팩터가 생깁니다.

list1 <- huge[c(1:8175),] 
list2 <- huge[c(8176:nrow(huge),] 

class(list1) 
[1] "factor" 

누군가가 내게 왜 그런지 설명 할 수 있습니까? 어떻게 방지 할 수 있습니까?

+0

'거대한'데이터 프레임의 최소한의 재현 가능한 예를 보여줍니다. – www

+0

그 개체에서'as.data.frame'을 시도해보고 tit가 그 형식으로 다시 변환 할 수 있는지 확인해보십시오. 또한 www가 올바르게 작동하는 예제를 보여줍니다. –

+0

'dput (거대한 [1:15,])'과 같은 것을 사용하여 예제를 보여주고 질문에 결과를 붙여 넣으십시오. – G5W

답변

1

1 열 데이터 프레임의 하위 집합이있을 수 있습니다. 다음 예제를 고려하십시오.

# Create an example data frame 
dt <- data.frame(a = 1:5, b = letters[1:5]) 
dt 

# a b 
# 1 1 a 
# 2 2 b 
# 3 3 c 
# 4 4 d 
# 5 5 e 

str(dt) 

# 'data.frame': 5 obs. of 2 variables: 
# $ a: int 1 2 3 4 5 
# $ b: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5 

# Subset the data frame 
list1 <- dt[1:2, ] 
list2 <- dt[3:nrow(dt), ] 

class(list1) 
# [1] "data.frame" 

코드

dt 작품을 세트에. 그러나 dt에서 1 열 데이터 프레임을 만들고 하위 집합을 만들면 출력이 자동으로 벡터가된다는 것을 알 수 있습니다. 데이터 프레임과 같은 출력을 유지하기 위해 상기 데이터 프레임을 부분 집합 때

# Create a one-column data frame 
dt2 <- dt[, 2, drop = FALSE] 

# Subset the data frame 
list3 <- dt2[1:2, ] 
list4 <- dt2[3:nrow(dt2), ] 

class(list3) 
# [1] "factor" 
list3 
# [1] a b 
# Levels: a b c d e 

용액 drop = FALSE 추가 될 것이다.

# Subset the data frame 
list5 <- dt2[1:2, , drop = FALSE] 
class(list5) 
# [1] "data.frame" 
+1

이제 알겠습니다. 방금 발견 한 또 다른 해결책은'head()'또는'tail()'을 사용하는 것입니다. –

관련 문제