2014-10-13 3 views
0

고르지 않은 테이블에서 데이터를 가져 오려면 어떻게합니까?read.csv를 사용하여 URL에서 데이터 가져 오기

URL에서 데이터 가져 오기는 상당히 간단하지만 URL의 데이터가 적절한 형식이 아닌 경우 어떻게해야합니까?

나는이 데이터 세트의 하단에있는 테이블을 원

이 URL에서 가져온
Sample: alpha-pinene in CDCl3, 13C-NMR 

# file names in/out: kurs.002, 
# spectrometer frequency = 62.895952 MHz 
# size = 16384 
# sw = 317.985 ppm, sw_h = 20000.00 Hz 
# fa = 17047.578 Hz, df = -1.221 Hz 
# ymax = 2448625, ymin = -85195 
# no. of peaks: 13 
#point pos[ppm] pos[Hz] intens. width 
    6520 144.5020 9088.59 24.67 2.01 
    7985 116.0689 7300.26 60.98 2.68 
    9972 77.5046 4874.73 27.53 3.14 * solvent 
    9998 77.0000 4842.99 27.51 3.15 * solvent 
10024 76.4954 4811.25 26.31 3.32 * solvent 
11534 47.1889 2967.99 59.17 2.45 
11860 40.8617 2570.04 69.15 2.51 
12007 38.0087 2390.60 15.30 2.86 
12343 31.4875 1980.44 95.20 2.34 
12352 31.3129 1969.45 100.00 1.93 
12605 26.4026 1660.61 94.80 2.15 
12784 22.9285 1442.11 74.33 2.85 
12893 20.8130 1309.05 92.16 2.21 

http://www.chemie.fu-berlin.de/chemistry/oc/terpene/gif/a-pinen_c.txt 내가 다음 코드를 사용하려고

peak.exp <- read.csv(url("http://www.chemie.fu-berlin.de/chemistry/oc/terpene/gif/a-pinen_c.txt"), 
skip=9, stringsAsFactors=FALSE) 

그러나 이것은 13 개의 관측치와 1 개의 변수의 데이터 프레임을 반환했습니다. 나는 13 개의 관측 값과 6 개의 변수 (또는 '용매'라벨을 무시할 수 있다면 5 개의 변수)를 가진 데이터 프레임을 원했다.

+0

"CSV"는 쉼표로 구분 된 값을 의미합니다. 파일에있는 쉼표는 어디에 있습니까? – Roland

+0

@copyt csv는 비 csv 파일에 대해서만 작동합니다. – user1945827

+0

물론 (그것은 결국'read.table'에 대한 래퍼 일뿐입니다). 그러나 파일 구분 기호가','이 아닌 경우이를 지정해야합니다. – Roland

답변

1

해당 데이터는 fixed-width format이므로 벡터에있는 열의 너비를 제공하여 정확하게 파싱하려면 read.fwf을 사용해야합니다 (예 : c(6, 9, 9, 8, 7, 10)). 또한 데이터를 얻기 위해 해당 파일에 몇 줄을 건너해야합니다 : 당신은 또한 (즉, 당신에게 중요한 경우) 열 이름을 변경해야합니다

dat <- read.fwf("http://www.chemie.fu-berlin.de/chemistry/oc/terpene/gif/a-pinen_c.txt", 
       c(6, 9, 9, 8, 7, 10), header=FALSE, skip=10) 

head(dat) 

##  V1  V2  V3 V4 V5   V6 
## 1 6520 144.5020 9088.59 24.67 2.01   
## 2 7985 116.0689 7300.26 60.98 2.68   
## 3 9972 77.5046 4874.73 27.53 3.14 * solvent 
## 4 9998 77.0000 4842.99 27.51 3.15 * solvent 
## 5 10024 76.4954 4811.25 26.31 3.32 * solvent 
## 6 11534 47.1889 2967.99 59.17 2.45   

, 당신은 제거 할 수 폭의 벡터를 c(6, 9, 9, 8, 7)으로 변경하여 "solvent"(V6) 열을 선택합니다.

+0

너는 어떻게 너비를 해결 했니? – user1945827

+0

(여기에서 경박하지 않으려 고 함) 각 열 + 앞 간격의 전체 너비를 계산합니다. – hrbrmstr

+0

'그럴 수 없다'고 시도했다. 나는 그들이 어디에서 텍스트 에디터로 라인을 복사하고 붙여 넣었다고 말했는지 추적했다. 나는 거기에 속임수가 있었을 것이라고 생각했다. 어쨌든 고마워! – user1945827

관련 문제