2012-04-27 3 views
8

다른 데이터 프레임 아래쪽에 하나를 추가하는 데 어려움이 있습니다.다른 데이터 프레임의 끝 부분에 하나의 데이터 프레임 추가 R

1 행 5 열의 데이터 프레임 (DF1이라고 함)이 있습니다. 나는 50 개의 행과 5 개의 열을 가진 또 다른 데이터 프레임 (DF2라고 부를 수있다)을 가지고있다. 두 데이터 프레임 사이의 열이 일치하도록 설정했는데 동일한 열이 있습니다. 실제로 DF1은 DF2를 기반으로 한 계산입니다.

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 

DF1은 값의 실제 데이터 점의 수 (# 있어야하는데 :

row.names  pt1  pt2  pt3  pt4 
    calc   0.93 0.45 0.28 0.54 

이 같은 DF2는 모습입니다 :

는 DF1의 모습입니다 누락되지 않음)를 총 가능한 값 수로 나눈 값입니다.

는 SO .. 내가 같이하는 DF2의 바닥에 DF1을 추가 할 : 나는

both.dfs <- rbind(DF1, DF2) # DF1 is first here 

DF1은 DF2 최초의 행 사용하려고 할 때

row.names  pt1  pt2  pt3  pt4 
    SNP1   AA  AG  AG  AA  
    SNP2   CT  CT  TC  CC 
    SNP3   GG  CG  CG  <NA> 
    SNP4   AA  GG  AG  AA 
    SNP5   <NA> <NA> <NA> <NA> 
    calc   0.93 0.45 0.28 0.54 

. 나는 그것이 최후의 행인 것을 필요로했다. 내가 병합을 시도했습니다

Warning messages: 
1: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
2: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
3: In `[<-.factor`(`*tmp*`, iseq, value = 0.84) : 
    invalid factor level, NAs generated 
4: In `[<-.factor`(`*tmp*`, iseq, value = 0.74) : 
    invalid factor level, NAs generated 

, 내가 DF2에 새 행을 추가하고 다음의 값에 하도 시도했다 :

내가

both.dfs <- rbind(DF2, DF1) # DF2 is first here 

를 사용하여 시도 오류가 발생합니다 DF2 ... 아무것도 작동하지 않는 것! 나는 도움이 절실히 필요하다! 누군가?

+0

짧은 대답은 당신이 할 수없는 (또는 적어도 당신이 shouldn입니다 '티). 데이터 프레임의 열은 모두 원자 벡터 (즉, 동일한 데이터 유형)이어야하며 숫자 (DF1)와 문자/요소 (DF2)를 혼합하려고합니다. – joran

+0

DF2의 열이 요인이 아닌 문자 인 경우 효과가 있습니다. 하지만 여전히 이러한 데이터 세트를 연결하는 다른 방법을 찾아야합니다. – joran

답변

6

당신이해야 할 작업은 다음과 같습니다

DFtranspose <- cbind(t(DF1[2, ]), t(DF2)) 
rownames(DFtranspose) <- DF1[1, ] 
3

나는 이것이 아마도 나쁜 생각 일 것이라는 의견에 동의하지만 다음과 같이 할 수 있습니다.

우선 list 기반의 data.frame은 이러한 방식으로 너무 잘 결합되지 않습니다. 데이터를 다시 바인딩하려면 매트릭스로 변환하는 것이 좋습니다. 데이터 프레임의 각 행에 대해 하나의 유형을 선택해야하므로 문자에 바인딩 된 숫자는 숫자로 유지할 수 없습니다. 당신이 문자로 모든 것을 처리하고자하는 경우,이 한번 풀어주고 다음은

> df1 <- data.frame(pt1="a", pt2="b", row.names=1) 
> rownames(df1) <- "e" 
> df2 <- data.frame(letters[1:4], pt1=1:4, pt2=2:5, row.names=1) 
> rbind(as.matrix(df2), as.matrix(df1)) 
    pt1 pt2 
a "1" "2" 
b "2" "3" 
c "3" "4" 
d "4" "5" 
e "a" "b" 
관련 문제