Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 我想获取数据帧中所有行的行号,其中列中的元素包含向量中的元素_R_Dataframe - Fatal编程技术网

R 我想获取数据帧中所有行的行号,其中列中的元素包含向量中的元素

R 我想获取数据帧中所有行的行号,其中列中的元素包含向量中的元素,r,dataframe,R,Dataframe,我有一个像这样的字符向量 Categories = sample(make.unique(rep(letters, length.out = 5), sep='')) Categories [1] "d-" "e-" "c-" "a-" "b-" 我有一个数据帧df,看起来像: df = data.frame(name = c(1:10), cat = paste(c(letters[1:10]), "-1", sep = "")) df name cat 1 1 a-1

我有一个像这样的字符向量

Categories = sample(make.unique(rep(letters, length.out = 5), sep=''))
Categories
[1] "d-" "e-" "c-" "a-" "b-"
我有一个数据帧df,看起来像:

df = data.frame(name = c(1:10), cat = paste(c(letters[1:10]), "-1", sep = ""))
df
    name cat
1     1   a-1
2     2   b-1
3     3   c-1
4     4   d-1
5     5   e-1
6     6   f-1
7     7   g-1
8     8   h-1
9     9   i-1
10   10   j-1
我想按照类别元素包含在df的“cat”列中的顺序获取df中的行号。所以,我想

dfRowNumbers
[1] 4,5,3,1,2

我怎样才能得到它呢?

我有一个解决方案,它在类别向量上使用for循环

rownums <- numeric()

for (i in 1:length(Categories)) {
  rownums[length(rownums) + 1] <- grep(Categories[i], df$cat)
}

rownums最直接的方法是使用
charmatch

charmatch(vec, df$cat)
[1] 4 5 3 1 2

或者使用
grep
sapply
返回命名向量

sapply(Categories, grep, df$cat, fixed=TRUE)
d- e- c- a- b- 
 4  5  3  1  2 

要获得一点语义糖分,请使用
Vectorize
构建您自己的函数:

vecGrep <- Vectorize(grep, vectorize.args="pattern")

数据

vec <- c("d-", "e-", "c-", "a-", "b-")
df = data.frame(name = c(1:10), cat = paste(c(letters[1:10]), "-1", sep = ""))

vec在用
sub
删除“cat”列的数字子字符串后,我们还可以使用
match

match(Categories, sub("\\d+$", "", df$cat))
#[1] 4 5 3 1 2
match(Categories, sub("\\d+$", "", df$cat))
#[1] 4 5 3 1 2