Подстановка значения набора данных не дает ожидаемого результата - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть следующие два кадра данных в R

    df=data.frame("Z_Frequency"=c(5,10,15,20,25), "Z_Slope2"=c(0,.7, 
   -0.5,0,.7))


    df24<-data.frame("Z_Frequency"=seq(from=min(df$Z_Frequency), to = 
    max(df$Z_Frequency), by = 1))

Я заполняю значения столбца df24 $ Z_SSLOPE, сравнивая значения df24 $ Z_Frequency и df $ Z_Frequency.если значение df24 $ Z_Frequency идентично значению df $ Z_Frequency, значение столбца df24 $ Z_SSLOPE будет скопировано из df $ Z_Slope2.Я написал следующий код для того же.

  df24$Z_SSLOPE<-0

for( i in 1: nrow(df)){ for (j in 1:nrow(df24)) { 
if(df24$Z_Frequency[j]==df$Z_Frequency[i]){ df24$Z_SSLOPE[j]<- 
df$Z_Slope2[i]} else if(df24$Z_Frequency[j]>df$Z_Frequency[i]& 
df24$Z_Frequency[j]<df$Z_Frequency[i+1]){
df24$Z_SSLOPE[j]=df$Z_Slope2[df24$Z_Frequency[j]>df$Z_Frequency[i] & 
df24$Z_Frequency[j]<df$Z_Frequency[i+1]]}}}

Ожидаемый результат будет следующим:

     Z_Frequency Z_SSLOPE
1            5      0.0
2            6      0.7
3            7      0.7
4            8      0.7
5            9      0.7
6           10      0.7
7           11     -0.5
8           12     -0.5
9           13     -0.5
10          14     -0.5
11          15     -0.5
12          16      0.0
13          17      0.0
14          18      0.0
15          19      0.0
16          20      0.0
17          21      0.7
18          22      0.7
19          23      0.7
20          24      0.7
21          25      0.7

В случае, если значения df24 $ Z_Frequency не находят совпадения в df $ Z_Frequency, значения заполняются следующим доступным совпадением df24$ Z_Frequency.Я получаю следующий вывод.

     Z_Frequency     Z_SSLOPE
 1            5      0.0
 2            6      0.0
 3            7      0.0
 4            8      0.0
 5            9      0.0
 6           10      0.7
 7           11      0.0
 8           12      0.0
 9           13      0.0
 10          14      0.0
 11          15     -0.5
 12          16      0.0
 13          17      0.0
 14          18      0.0
 15          19      0.0
 16          20      0.0
 17          21      0.0
 18          22      0.0
 19          23      0.0
 20          24      0.0
 21          25      0.7

Первая часть оператора if работает.Однако я не могу обнаружить ошибку в другой части оператора if.Я прошу чью-то помощь.

1 Ответ

0 голосов
/ 04 февраля 2019

Если у вас нет проблем с dplyr, мы можем dplyr::left_join, тогда tidyr::fill разрыв назад

library(dplyr)
library(tidyr)

df24 %>% 
 left_join(df) %>% 
 fill(Z_Slope2,.direction = 'up')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...