合并数据框和命名向量

时间:2018-08-17 13:54:47

标签: r vector merge

我有一个数据框和一个名称向量:

// 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命名为向量

2 个答案:

答案 0 :(得分:10)

我们可以{{1}中的matchcol1 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)))