повторение конкретной клетки в R - PullRequest
0 голосов
/ 07 мая 2018

Я совсем новичок в R. У меня большой набор данных, в котором я хочу повторить определенную ячейку для каждого человека.См. Ниже подмножество:

dfX <- data.frame("picode" = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,5,6,6,6,6), 
  "Age" = c(0,7,14,21,28,30,0,7,14,21,28,30,0,8,0,8,15,21,29,0,0,5,7,14), 
  "IUGRsc1" = c(0.12,NA,NA,NA,NA,NA,0.26,NA,NA,NA,NA,NA,0.15,NA,0.19,NA,NA,NA,NA,0.3,0.23,NA,NA,NA))

Я хочу повторить IUGRsc1 для каждого человека, то есть:

dfX2 <- data.frame("picode" = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,5,6,6,6,6), 
  "Age" = c(0,7,14,21,28,30,0,7,14,21,28,30, 0,8,0,8,15,21,29,0,0,5,7,14),
  "IUGRsc1" = c(0.12,0.12,0.12,0.12,0.12,0.12,0.26,0.26,0.26,0.26,0.26,0.26,0.15,0.15,0.19,0.19,0.19,0.19,0.19,0.3,0.23,0.23,0.23,0.23))

Я пробовал с for петлями, но не мог понять, какпусть R поймет, какую ячейку повторять для каждого человека ... Любое предложение?

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

Вам нужно создать два фрейма данных и использовать функцию слияния. Это похоже на v-lookup в excel и left-join в SQL.

df1 = data.frame( picode=c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,5,6,6,6,6),
                  Age=c(0,7,14,21,28,30,0,7,14,21,28,30, 0,8,0,8,15,21,29,0,0,5,7,14))

df2 =  data.frame(picode = c(1,2,3,4,5,6),IUGRsc1=c(0.12,0.26,0.15,0.19,0.3,0.23))

df = merge(df1, df2, all.x = TRUE, by.x = 'picode', by.y = 'picode', sort = FALSE)
head(df)

Спасибо

0 голосов
/ 07 мая 2018

Вы можете использовать tidyr::fill()

fill {tidyr}

Заполните пропущенные значения.

Заполняет пропущенные значения при использовании предыдущей записи. Это полезно в общем формате вывода, где значения не повторяются, они записываются каждый раз, когда они меняются.

library(tidyverse)
identical(dfX2, fill(dfX, IUGRsc1))
[1] TRUE
0 голосов
/ 07 мая 2018

Вы можете использовать функцию rep с times и each параметрами

например.

IUGRsc1 = rep(x=c(0.12,0.26,0.15.....),times=3,each=6)
...