我尝试了这个,但这又需要一个for
循环进行比较,以便找到索引的更好方法。
str[[1]][1]
"NYA.FWD.AMGM.MON..MAXRUNALARM."
m<-grep( str[[1]][1] , colnames(log_data)[2:ncol(log_data)] , value=FALSE)
m
[1] 5 6
其中
colnames(log_data)[6]
"NYA.FWD.AMGM.MON..MAXRUNALARM....SU."
colnames(log_data)[7]
"NYA.FWD.AMGM.MON..MAXRUNALARM."
我只希望 6 作为索引,意味着字符串的精确长度,或者是否有更好的方法来提取相同长度的类似字符串。
我也用过
str_detect((colnames(log_data)[2:ncol(log_data)]),fixed(str[[1]][1]))
[1] FALSE FALSE FALSE FALSE **TRUE TRUE** FALSE FALSE FALSE FALSE FALSE FALSE
[13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
但是获取逻辑向量只需要一个单个索引,谢谢。
答案 0 :(得分:2)
如果您想要完全匹配,请使用match
:
match(str[[1]][1], colnames(log_data)[2:ncol(log_data)])
它将返回第一场比赛的索引。如果您有多个匹配并想要所有索引,请执行:
which(str[[1]][1] == colnames(log_data)[2:ncol(log_data)])
答案 1 :(得分:0)
这是一个正则表达式方法,它使用字符串长度(nchar
和/或nzchar
)来返回所有完全匹配的索引。仅对于第一场比赛,只需将[1]
添加到下方which(...)
来电的末尾(即which(...)[1]
)。
假设c.names
是colnames(log_data)
的结果。
> s <- "NYA.FWD.AMGM.MON..MAXRUNALARM."
> c.names <- c("NYA.FWD.AMGM.MON..MAXRUNALARM....SU.",
"NYA.FWD.AMGM.MON..MAXRUNALARM.",
"NYA.FWD.AMGM.MON..MAXRUNALARM..D.",
"..NYA.FWD.AMGM.MON..MAXRUNALARM.",
"NYA.FWD.AMGM.MON..MAXRUNALARM.")
仅限第一场比赛:
> which(!nzchar(gsub(s, '', c.names)))[1]
## [1] 2
所有比赛:
> which(!nzchar(gsub(s, '', c.names)))
## [1] 2 5