这实际上与我的其他问题相对应,但事情变得更加复杂.我有data.frame和vector:
df <- data.frame(key=c(0,3:6), value=c(0,52,26,12,1))
x <- c(3,4,3,3,5,5,6,6,6,6)
Run Code Online (Sandbox Code Playgroud)
并且需要从基于x的df获取值作为键:
[1] 52 26 52 52 12 12 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
上一个答案的解决方案只能给出没有重复的结果:
df[df$key %in% x,"value"]
[1] 52 26 12 1
Run Code Online (Sandbox Code Playgroud)
有办法解决这个问题吗?
另外,我看到hash()可以执行以下操作:
h <- hash( keys=letters, values=1:26 )
h$a # 1
h[ "a" ]
h[[ "a" ]]
z <- rep(letters[3:5],2)
h[z] # still with NO duplicates
<hash> containing 3 key-value pair(s).
c : 3
d : 4
e : 5
Run Code Online (Sandbox Code Playgroud)
但似乎它无法返回值的向量,例如:
h[[z]]
Error in h[[z]] : wrong arguments for subsetting an environment
Run Code Online (Sandbox Code Playgroud)
否则,它将是完美的,以便我们可以通过使用一些"真正的"哈希概念来摆脱data.frame.
谢谢!
回答你的第一个问题:使用match
df[match(x, df$key), ]
key value
2 3 52
3 4 26
2.1 3 52
2.2 3 52
4 5 12
4.1 5 12
5 6 1
5.1 6 1
5.2 6 1
5.3 6 1
Run Code Online (Sandbox Code Playgroud)
您还应该看看命名向量
dat <- c(0,52,26,12,1)
names(dat) <- as.character(c(0,3:6))
dat[as.character(x)]
3 4 3 3 5 5 6 6 6 6
52 26 52 52 12 12 1 1 1 1
Run Code Online (Sandbox Code Playgroud)