我有一个声音接收器检测到的数据帧。我大约有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")
答案 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))
并一步一步完成,split
到list
s的data.frame
lst1 <- split(AC, grepl("^TRD", AC$Station))