Как применить данные grep () по id - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть df RawDat с двумя рядами ID, data.Я хочу выполнить grep () моих данных по идентификатору, используя, например, lapply (), чтобы сгенерировать новый df, где данные сортируются по столбцам по их id: мой df выглядит так, за исключением того, что у меня> 80000 строк и 75 идентификаторов:

ID data abl 564 dlh 78 vho 354 mez 15 abl 662 dlh 69 vho 333 mez 9 . . .

Я могу вручную извлечь данные с помощью функции grep ():

ExtRawDat = as.data.frame(RawDat[grep("abl",RawDat$ID),])

Однако я бы не хотел делать это 75 раз и cbind () им.Скорее, я хотел бы использовать функцию lapply () для ее автоматизации.Я пробовал несколько вариантов следующего кода, но у меня нет сценария, который обеспечивает желаемый результат.

У меня есть вектор с 75 идентификаторами ProLisV, чтобы зациклить мой аргумент

ExtRawDat = as.data.frame(lapply(ProLisV[1:75],function(x){     
Temp1 = RawDat[grep(x,RawDat$ID),]      # The issue is here, the pattern is not properly defined with the X input (is it detrimental that some of the names in the list having spaces etc.?)
Values = as.data.frame(Temp1$data)
list(Values$data)
}))

Требуемый выход выглядит следующим образом:

abl dlh vho mez ... 564 78 354 15 662 69 333 9 . . .

Как настроить эту функцию для обеспечения желаемого выхода?Спасибо.

1 Ответ

0 голосов
/ 25 апреля 2018

Похоже, что вы пытаетесь преобразовать ваши данные из длинной формы в широкую форму.Один из способов сделать это легко - использовать функцию spread из пакета tidyr.Чтобы использовать его, нам нужен столбец для удаления повторяющихся идентификаторов , поэтому мы сначала добавим группирующую переменную:

n.ids <- 4 # With your full data this should be 75
df$group <- rep(1:n.ids, each = n.ids, length.out = nrow(df))
tidyr::spread(df, ID, data)

#   group abl dlh mez vho
# 1     1 564  78  15 354
# 2     2 662  69   9 333

Если вам не нужен столбец group вконец, просто сделай df$group <- NULL.

Данные

df <- read.table(text = "
  ID     data
  abl     564
  dlh     78
  vho     354
  mez     15
  abl     662
  dlh     69
  vho     333
  mez     9", header = T)
...