通过部分数据点名称对数据框进行子集

时间:2019-01-17 14:04:08

标签: r subset

我有一个声音接收器检测到的数据帧。我大约有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 :(得分:2)

这是一种方法:

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

答案 1 :(得分:1)

您可以通过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

答案 2 :(得分:1)

如果存在部分匹配,我们可以在grepl中使用subset

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

并一步一步完成,splitlist s的data.frame

lst1 <- split(AC, grepl("^TRD", AC$Station))