【发布时间】:2015-09-25 10:35:48
【问题描述】:
我有一个包含一列索引的数据框,以及一个将每个索引映射到一个值的列表。
x <- data.frame( index = c("bob","tom","bob","harry") )
lst <- list( "bob" = 10, "tom" = 20, "harry" = 30 )
我想使用索引列在数据框中创建一个新列(“查找”)以在列表中查找适当的值。我想像......
x$lookup <- lst[[ x$index ]] # nope, doesn't work
... 可能会起作用,但由于尝试递归索引而失败。以下工作,但我想尽可能避免使用循环:
for (i in 1:nrow(x) ) { # works, but is ugly
x[ i, "lookup" ] <- lst[[ as.character( x[i,"index"] ) ]]
}
产生以下期望的结果:
> x
index lookup
1 bob 10
2 tom 20
3 bob 10
4 harry 30
有没有办法在不使用循环的情况下做到这一点?
我还惊讶地发现,创建“x”会生成一个包含因子而不是字符串的数据框列。 在循环中使用“as.character”是正确索引到列表中的最佳方式吗?
R 和 Stackoverflow 的新手,在尝试搜索答案失败后发布我的第一个问题。为我的新鲜感道歉。
【问题讨论】: