Присвоить предыдущее значение строке в R Условно для типа данных - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь привести в порядок фрейм данных в R. Мой файл необработанных данных включает 2 типа таблиц в массивном фрейме данных, и они помечены значением Record Indicator (RI) = 100 или 200.

  • RI == 100 соответствуют важным деталям, таким как единица измерения (UOM) и идентификационные ссылки для следующих последовательных данных (RI == 200). Это столбцы RI, ID и UOM.
  • RI == 200 соответствует данным, которые мне нужны во фрейме данных. Это столбцы RI, Measure1, Measure2, Measure3 и Time. Обратите внимание, что они не всегда имеют одинаковую длину, поскольку у меня может быть больше истории для определенных идентификаторов.

Пример моего df выглядит так:

RI Measure1 Measure2 Measure3 Time
100 Scott cm N/A N/A
200 1.6 0.2 1.5 0
200 1.3 0.5 0.6 1
200 8.1 7.5 0.8 2
100 James inches N/A N/A
200 0.1 0.1 0.5 0
200 0.1 0.1 0.3 1
200 0.5 0.5 0.6 2
200 0.1 0.5 0.1 3

Я добавил 2 столбца с начальными значениями в моем расширенном фрейме данных:

  • df $ ID <- df $ Measure1 </li>
  • df $ UOM <-df $ Measure2 </li>

Мне нужно заменить значения для всех RI = 200, чтобы они были равны предыдущему значению, чтобы опустить ID и UOM для каждой строки.

Наконец, я могу обрезать свои данные до df [df $ RI == 200,]

Как мне для данной строки (при условии, что это RI == 200), заменить значение для df $ ID и df $ UOM на предыдущее значение?

Вот что я пытался безрезультатно:

apply(df[df$RI==200,],1,function(x) {df$ID <-df$ID[-1]})

1 Ответ

0 голосов
/ 31 октября 2018

Вот что я пробовал.

df=read.table(text="
RI Measure1 Measure2 Measure3 Time
100 Scott cm N/A N/A
200 1.6 0.2 1.5 0
200 1.3 0.5 0.6 1
200 8.1 7.5 0.8 2
100 James inches N/A N/A
200 0.1 0.1 0.5 0
200 0.1 0.1 0.3 1
200 0.5 0.5 0.6 2
200 0.1 0.5 0.1 3", header=T)

f=df$RI
counter=0
for(i in 1:length(f)){
    if(f[i]==100) counter=counter+1
    f[i]=counter
}

df$f=f

df100=df[df$RI==100,c("Measure1","Measure2","f")]
colnames(df100)=c("ID","UOM","f")
df200=df[df$RI==200,]
dplyr::left_join(df200,df100, by="f")

Какие отпечатки

   RI Measure1 Measure2 Measure3 Time f    ID    UOM
1 200      1.6      0.2      1.5    0 1 Scott     cm
2 200      1.3      0.5      0.6    1 1 Scott     cm
3 200      8.1      7.5      0.8    2 1 Scott     cm
4 200      0.1      0.1      0.5    0 2 James inches
5 200      0.1      0.1      0.3    1 2 James inches
6 200      0.5      0.5      0.6    2 2 James inches
7 200      0.1      0.5      0.1    3 2 James inches
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...