0

표준 높이에서 여러 변수 값을 찾는 데 필요한 거대한 데이터가 있습니다. 다른 변수의 값을 Height=c(0,100,200,250,400,500)에 선형 보간하고 기존 데이터에 새 열로 추가하려고합니다. 다음은 하나의 변수에 대한 값을 표준 인 Height=c(0,100,200,250,400,500)으로 얻으려고 시도한 것입니다. 이것은 단지 하나 개의 변수이다r에서 선형 보간법으로 값 찾기

data2<-approx(data2$Height,data2$ozone,xout=c(0,100,200,250,400,500))

예상 결과는 18 개의 행 및 4 열로 구성된 데이터 프레임되어야한다.

여기에 샘플 데이터 (data2)입니다 :

ozone  Height  Temp  Wind 
23.224833 0.000000 253.005798 3.631531 
23.750044 35.218689 253.299332 5.178889 
24.589071 70.661133 253.538574 6.892455 
25.619747 106.267334 253.492661 8.050934 
26.443541 142.014648 253.279053 8.648781 
27.235945 213.897034 252.815262 9.263882 
27.698713 286.280518 252.10556 9.269853 
27.865248 359.172363 251.390045 9.3006 
28.361752 432.788086 251.379913 8.90488 
30.279163 507.276733 251.849655 7.817647 
23.048151 0.000000 251.528275 4.174027 
23.477306 34.998413 251.6698 5.630364 
24.16725 70.187622 251.759369 7.237537 
25.239206 105.544006 251.744934 8.859097 
26.319073 141.05011 251.601654 9.928196 
27.409718 212.47052 251.214279 10.75243 
27.825275 284.45282 250.738007 10.812123 
28.214966 357.184631 250.87706 9.980968 
29.726873 430.919983 251.84964 9.139032 
32.482925 505.574097 252.471924 8.063484 
22.369734 0.000000 250.876144 3.82036 
22.916582 34.908447 251.044205 5.281044 
23.732521 70.014038 251.170456 6.970277 
24.998178 105.296021 251.221603 8.801399 
26.30809 140.736084 251.133591 10.039667 
27.572966 212.052795 250.852631 11.118568 
28.233795 283.998474 250.61908 10.677624 
29.079391 356.812012 251.179962 9.466641 
31.244007 430.597534 252.042175 9.016301 
33.636559 505.305542 252.659393 8.103294 

당신의 도움에 미리 감사드립니다. 열을 통해

Height ozone  Temp  Wind 
     0 23.22483 253.0058 3.631531 
    100 25.43833 253.5007 7.847021 
    200 27.08275 252.9049 9.144964 
    300 27.73006 251.9709 9.275640 
    400 28.14061 251.3844 9.081132 
    500 30.09185 251.8038 7.923858 
     0 23.04815 251.5283 4.174027 
    100 25.07112 251.7472 8.604831 
    200 27.21928 251.2819 10.608513 
    300 27.90858 250.7677 10.634455 
    400 29.09287 251.4418 9.492087 
    500 32.27714 252.4255 8.143790 
    0 22.36973 250.8761 3.820360 
    100 24.80820 251.2139 8.526537 
    200 27.35920 250.9001 10.936230 
    300 28.41962 250.7423 10.411498 
    400 30.34638 251.6846 9.203049 
    500 33.46665 252.6156 8.168133 

답변

2

당신은 그냥 작동이 lapply를 사용하여 :

UPDATE 여기

원하는 대답이다. 또한 보간 값을 data2에 추가 할 수 없습니다. data2에는 30 행이 있고 xout 길이에는 6입니다. 보간 결과를 저장하려면 다른 데이터 프레임이 필요합니다.

cbind.data.frame(data.frame(Height = 0:5 * 100), 
       lapply(data2[-2], function (u) approx(data2[[2]], u, 0:5 * 100)$y)) 

# Height ozone  Temp  Wind 
#1  0 22.88091 251.8034 3.875306 
#2 100 24.93562 251.5759 8.509502 
#3 200 27.37860 251.2702 10.693545 
#4 300 27.96728 251.9255 9.308131 
#5 400 29.79659 251.7628 9.138091 
#6 500 33.25064 252.5658 8.161940 

는 원래 데이터가 3 일간 모델 출력

후속, 나는 다른 데이터와 비교하기위한 몇 가지 표준 높이로 유지하려는. 따라서 각 데이터 프레임은 1 일 데이터를 나타냅니다. 따라서 하나의 큰 데이터 프레임 data2에서 다른 변수와 동일한 높이로 병합합니다.

괜찮 으면 data2에는 시간 속성이 있고 10 행마다 하루 데이터가 해당됩니다. 행별로 다른 날의 데이터를 쌓아서는 안됩니다. 이렇게하면 새 열 (예 : day)을 추가하여 이러한 종류의 블록/그룹 구조를 강조 표시해야합니다.

그래서 정말로 필요한 것은 각 데이터에 대한 독립적 인 선형 보간법입니다. 내 원래의 대답은 모든 3 일간의 데이터를 사용하여 통일 보간을하는 것입니다. Height에 값을 연결 했으므로 실제로는 ozone, TempWind의 평균을 3 일 동안 보간합니다. 다음 코드는 예상 한 것을 얻는다.

## change my previous code to a function 
result_per_day <- function (dat) { 
    cbind.data.frame(data.frame(Height = 0:5 * 100), 
        lapply(dat[-2], function (u) approx(dat[[2]], u, 0:5 * 100)$y)) 
    } 

datalst <- split(data2, gl(3, 10, labels = 1:3)) 
do.call(rbind.data.frame, lapply(datalst, result_per_day)) 

# Height ozone  Temp  Wind 
#1.1  0 23.22483 253.0058 3.631531 
#1.2 100 25.43833 253.5007 7.847021 
#1.3 200 27.08275 252.9049 9.144964 
#1.4 300 27.73006 251.9709 9.275640 
#1.5 400 28.14061 251.3844 9.081132 
#1.6 500 30.09185 251.8038 7.923858 
#2.1  0 23.04815 251.5283 4.174027 
#2.2 100 25.07112 251.7472 8.604831 
#2.3 200 27.21928 251.2819 10.608513 
#2.4 300 27.90858 250.7677 10.634455 
#2.5 400 29.09287 251.4418 9.492087 
#2.6 500 32.27714 252.4255 8.143790 
#3.1  0 22.36973 250.8761 3.820360 
#3.2 100 24.80820 251.2139 8.526537 
#3.3 200 27.35920 250.9001 10.936230 
#3.4 300 28.41962 250.7423 10.411498 
#3.5 400 30.34638 251.6846 9.203049 
#3.6 500 33.46665 252.6156 8.168133 

이 최종 데이터 프레임의 행 이름은 매우 명확합니다. "1.1" to "1.6"은 1 일, "2.1" to "2.6"은 2 일 등

+0

벡터는 0에서 500까지의 높이와 같습니다. 3 번 반복됩니다. 나가 아주 긴 줄이있는 때 당신의 응답에서 그것을 통합하는 방법을 파악하는 것을 시도. – G1124E

+0

예, 벡터는 동일하지만 처음 10 개의 행을 사용하는 대신 다른 행의 값을 보간해야합니다. 보간은 다른 10 ~ 30 행에 대해 각각 수행해야합니다. – G1124E

+0

@ Zheyuan Li 다시 한 번 감사드립니다. 나는 보간법을 얻는다. 나는 나머지를 알아 내려고 노력할 것이다. 당신은 내 마지막 질문을 완전히 이해하지 못하는 것 같습니다. – G1124E