2014-01-28 4 views
0

첫 번째 행의 헤더로 data.frame의 헤더를 대체하고 싶습니다. 데이터를 read.xls()와 함께 가져 왔습니다. 원본 파일을 다시 읽는 것은 불행히도 옵션이 아닙니다.R 행의 이름으로 헤더 대체

 bad header here 
1 new header2 here 
2 58 3.222  50 
3 25 10.000 40 
4 5 0.847  152.5 
5 15 1.633  98 

결과는 다음과 같아야합니다

new header2 here 
1 58 3.222  50 
2 25 10.000 40 
3 5 0.847  152.5 
4 15 1.633  98 

감사합니다,

매트

답변

1

이 데이터가 my.data라고 가정하면. 프레임은 헤더에 행 1을 할당 한 다음 행 1을 삭제합니다.

#assign row 1 names to the header   
    names(my.data.frame) <- as.character(my.data.frame[1,]) 

    #delete the first row 
    my.data.frame <- my.data.frame[2:nrow(my.data.frame),] 
+0

그러나 OP는 더 이상 소스 파일에 액세스 할 수 없다고 말했습니다. –

+0

이름과 as.character의 조합은 내가 필요한 것입니다. 감사. @carl이 솔루션은 데이터 세트를 다시 읽지 않고 작동합니다! – mace

1

가정 당신의 data.frame "mydf"당신이 이런 식으로 뭔가를 시도 할 수 있습니다라고 :

df2 <- setNames(mydf[-1, ], mydf[1, ]) 

그러나, 당신의 데이터는 모두 그들이 처음에 읽은 방법에 따라 문자 또는 요소가 될 것입니다

str(df2) 
# 'data.frame': 4 obs. of 3 variables: 
# $ new : chr "58" "25" "5" "15" 
# $ header2: chr "3.222" "10.000" "0.847" "1.633" 
# $ here : chr "50" "40" "152.5" "98" 

당신은 다음과 같은 것을 변환 할 수 있습니다.

df2[] <- lapply(df2, function(x) type.convert(as.character(x))) 
str(df2) 
# 'data.frame': 4 obs. of 3 variables: 
# $ new : int 58 25 5 15 
# $ header2: num 3.222 10 0.847 1.633 
# $ here : num 50 40 152 98 
df2 
# new header2 here 
# 2 58 3.222 50.0 
# 3 25 10.000 40.0 
# 4 5 0.847 152.5 
# 5 15 1.633 98.0