如何根据R中data.frame中给出的数据获取列表中所有元素的索引?
我有一个数据框和一个列表,如下所示:如何根据R中data.frame中给出的数据获取列表中所有元素的索引?,r,R,我有一个数据框和一个列表,如下所示: > df value 1 5 2 25 3 6 4 70 并列出: > y [[1]] [1] 5 6 70 25 [[2]] [1] 6 70 5 25 如何使列表返回每个元素的索引,以便: > y [[1]] [1] 1 3 4 2 [[2]] [1] 3 4 1 2 我
> df
value
1 5
2 25
3 6
4 70
并列出:
> y
[[1]]
[1] 5 6 70 25
[[2]]
[1] 6 70 5 25
如何使列表返回每个元素的索引,以便:
> y
[[1]]
[1] 1 3 4 2
[[2]]
[1] 3 4 1 2
我们可以使用
match
通过循环列表
并与'df'的'value'列匹配来获取索引
lapply(y, function(x) match(x, df$value))
#[[1]]
#[1] 1 3 4 2
#[[2]]
#[1] 3 4 1 2
或者没有匿名函数
lapply(y, match, df$value)
数据
df假设末尾注释中的数据:
Map(match, y, df)
给予:
[[1]]
[1] 1 3 4 2
[[2]]
[1] 3 4 1 2
此处的数据不需要,但如果您的df
实际上有多个列,请指定value
列是这样使用的:
Map(match, y, df["value"])
注
Lines@WeiShung只要我们与单个列“df$value”匹配,它仍然可以工作。对于大数据,vapply
会更快vapply(y,function(x)FUN=match(x,df$value),FUN.value=integer(length(y[[1]])
谢谢。我发现了一个问题。如果值列中的“6”现在是5,并且列表中的一个包含2“5”,您将如何执行此操作。我希望它们显示索引“1”、“3”,而不仅仅是“1”。
Map(match, y, df["value"])
Lines <- " value
1 5
2 25
3 6
4 70"
df <- read.table(text = Lines)
y <- list(c(5, 6, 70, 25), c(6, 70, 5, 25))