2014-12-05 2 views
2

행을 생성하고 하나씩 추가하여 R에서 데이터 프레임을 크레이트하려고합니다. 나는 X를 인쇄 할 때 내 질문은프레임에 행 추가 및 인쇄 R

# create an empty data frame. 

x <- data.frame() 

# Create 2 lists. 

l1 <- list (a = 9, b = 2, c = 4) 
l2 <- list (a = 7, b = 2, c = 3) 

# Append and print. 

x <- rbind (x, l1) 
x 

    a b c 
2 9 2 4 

# append l2 

x <- rbind (x, l2) 
x 

    a b c 
2 9 2 4 
21 7 2 3 

# Append again 

x <- rbind (x, l2) 
x 

    a b c 
2 9 2 4 
21 7 2 3 
3 7 2 3 

# Append again. 

x <- rbind (x, l2) 
x 

    a b c 
2 9 2 4 
21 7 2 3 
3 7 2 3 
4 7 2 3 

다음을 수행하고, 각 행의 시작 (즉, 값 2, 21, 3, 4 ...) 왜에 인쇄 된 값의 의미가 무엇인가 이 값들은 그대로 나타나고, 1,2, 3, 4 ...가 될 것으로 예상됩니다. 그리고 대응하는 행의 인덱스를 보여줍니다.

도와주세요.

+1

R에서는 일반적으로 데이터를 열 방향으로 작성한 다음 함께 cbind하거나 rowwise (느리게 작성)보다는 'data.frame'을 사용하는 것이 더 좋습니다. –

+0

예 이전에 내가 들으려고하는 다른 문제와 관련하여 내 질문에 대해 들었습니다. 행에 현명하게 추가해야합니다. – amitjo

답변

1

빈 데이터 프레임을 초기화하지 않으면 이상한 행 이름을 사용할 수 없습니다.

x <- as.data.frame(l1) 
x <- rbind (x, l1) 
x <- rbind (x, l2) 
x <- rbind (x, l2) 
x 

보다 효율적인 방법으로 행을 바인드하려면 data.table 패키지의 rbindlist 함수를 사용하는 것이 좋습니다.

2

rbinddata.framelist을 입력하려고했습니다. rbind 명령을 다음으로 변경하면

x <- rbind (x, as.data.frame(l1)) 

이 발생하지 않습니다.

많은 목록이있는 경우 매우 편리하고 빠른 data.table 패키지를 제안 해주십시오. 예를 들면 다음과 같습니다.

library(data.table) 
n = 100; 
V=vector("list",n) 
for (i in 1:n) { 
    V[[i]]<-list(a=runif(1),b=runif(1),c=runif(1)); 
} 
V=rbindlist(V) 
V 

감사합니다.

+0

목록에 as.data.frame을 추가하는 것이 트릭을 만들었습니다. 고마워. – amitjo

관련 문제