我有一个数据框和一个名称向量:
// index.js
import ReactDOM from 'react-dom';
import greeter from './components/greeter';
const main = document.getElementsByTagName('main')[0];
ReactDOM.render(greeter('World'), main);
我要合并它们,并仅保留数据框中的值
df=data.frame(col1=letters[1:3],col2=rnorm(3))
v=c(a=2,b=4,c=56,d=65)
我想要:
v=data.frame(v)
merge(df,v,by.x='col1',by.y=row.names,all.x=TRUE)
Error in as.vector(x, mode) :
cannot coerce type 'closure' to vector of type 'any'
请注意,我的真实数据是1M行和1.5M命名为向量
答案 0 :(得分:10)
我们可以{{1}中的match
中col1
names
v
@Frank在评论中提供一种更简单的方法,
df$v <- v[match(df$col1, names(v))]
df
# col1 col2 v
#1 a 0.6658478 2
#2 b -1.6029447 4
#3 c 0.9019324 56
答案 1 :(得分:6)
我们可以使用向量的names
创建一列,然后执行merge
merge(df, data.frame(v, col1 = names(v)), all.x = TRUE)
# col1 col2 v
#1 a -1.61035092 2
#2 b -0.04848256 4
#3 c 2.74926847 56
在OP的代码中,row.names
中的by.y
应该用引号引起来
merge(df, data.frame(v), by.x = "col1", by.y = "row.names")
# col1 col2 v
#1 a -1.61035092 2
#2 b -0.04848256 4
#3 c 2.74926847 56
或使用left_join
中的tidyverse
library(tidyverse)
left_join(df, data.frame(v, col1 = names(v)))