我有一个看起来像这样的字符向量
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
我怎样才能得到它?
最佳答案
最直接的方法是,您可以使用 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")
然后用它返回一个命名向量
vecGrep(Categories, df$cat, fixed=TRUE)
d- e- c- a- b-
4 5 3 1 2
数据
vec <- c("d-", "e-", "c-", "a-", "b-")
df = data.frame(name = c(1:10), cat = paste(c(letters[1:10]), "-1", sep = ""))
关于r - 我想获取数据框中所有行的行号,其中列中的元素包含向量中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47074885/