Подстановка фрейма данных частичными именами точек данных - PullRequest
0 голосов
/ 17 января 2019

У меня есть дата-кадр обнаружений от акустических приемников. У меня есть около 70 получателей, и я собираюсь поместить свои данные в «линию» получателей. Названия станций обозначаются так: "TRC1-69", "TRC1-180", "TRC2-69", "TRC2-180" .... "TRD1-69", "TRD1-180", "TRD2-69 "," TRD2-180 ". По сути, я пытаюсь собрать все приемники C в одном кадре данных, приемники D в одном кадре данных и т. Д.

Это то, что я пробовал до сих пор

Dline <- AC[rownames(AC) %like% "TRD", ]

или

Dline <- subset(AC, Station == "TRD")

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Вы можете использовать простое регулярное выражение через gsub, т.е. (используя набор данных @Moody_Mudskipper)

split(df1, gsub('(.*)[0-9]+-[0-9]+', '\\1', rownames(df1)))
#$`TRC`
#         val
#TRC1-69    1
#TRC1-180   2
#TRC2-69    3
#TRC2-180   4

#$TRD
#         val
#TRD1-69    5
#TRD1-180   6
#TRD2-69    7
#TRD2-180   8
0 голосов
/ 17 января 2019

Мы можем использовать grepl в subset при частичном совпадении

subset(AC, grepl("^TRD", Station))

и сделать это за один шаг, split в list из data.frame с

lst1 <- split(AC, grepl("^TRD", AC$Station))
0 голосов
/ 17 января 2019

Вот способ:

df1 <- data.frame(
  val = 1:8,
  row.names =  c("TRC1-69", "TRC1-180", "TRC2-69", "TRC2-180", 
                 "TRD1-69", "TRD1-180", "TRD2-69", "TRD2-180"))

split(df1, substr(row.names(df1),3,3))

# $C
# val
# TRC1-69    1
# TRC1-180   2
# TRC2-69    3
# TRC2-180   4
# 
# $D
# val
# TRD1-69    5
# TRD1-180   6
# TRD2-69    7
# TRD2-180   8
...