如何将命名元素添加到R中的向量

时间:2016-09-12 04:34:15

标签: r vector named

我有一个命名向量(比如n),其名称为1到25000的连续整数,以及与之关联的值,以及另一个较小的向量(比如m),类似于" n",21399元素,名称从1开始,到25000结尾。

我想将命名元素添加到矢量" m"缺少名称并为其指定值0。

我这样做是通过创建两个数据框,其名称和值为两列,然后进行左连接,但有没有更好的方法呢?

一个小得多的例子:

> n=c("1"=3,"2"=5,"3"=2,"4"=9,"5"=8)
> n
1 2 3 4 5 
3 5 2 9 8 
> m=c("1"=9,"2"=7,"5"=2)
> m
1 2 5 
9 7 2 

我想要我的决赛" m"是:

> m
1 2 3 4 5 
9 7 0 0 2 

我做的是:

> x=data.frame("p"=names(n),n)
> y=data.frame("p"=names(m),m)
> join(x,y,by="p")
  p n m
1 1 3 9
2 2 5 7
3 3 2 0
4 4 9 0
5 5 8 2

2 个答案:

答案 0 :(得分:2)

几次尝试:

NA

使用setNames( m[match(names(n),names(m))], names(n) ) # 1 2 3 4 5 # 9 7 NA NA 2 而不是0:

 app.get('/:shopId/:locationId/announcement/*',function(req,res,next){
    async.waterfall([
      function (done) {
        var resultsObj = '';  
        var httpTransport = 'http://';
        if (config.secure && config.secure.ssl === true) {
          httpTransport = 'https://';
        } 
        var url = httpTransport + req.headers.host+'/api/offer/getbyid/'+req.params[0];
        request.get(url, function (err, res, body) {
          resultsObj = JSON.parse(body);
          done(err, resultsObj);
        });


      },
      function (resultsObj, done) {
        var httpTransport = 'http://';

        if (config.secure && config.secure.ssl === true) {
          httpTransport = 'https://';
        } 
        var url = httpTransport + req.headers.host+'/api/shops/'+req.params.shopId+'/'+req.params.locationId;   
        request.get(url, function (err, res, body) {
          var resultsObjNew='';     
          resultsObjNew = JSON.parse(body);
          done(err, resultsObjNew,resultsObj);
        });

      },
      function (resultsObjNew,resultsObj, done) {

        res.render('modules/core/server/views/announcement', {
          title: resultsObj[0].title,
          imageUrl  : resultsObj[0].imageURL,
          desc : resultsObj[0].desc,
          link:resultsObj[0].redirectLink,
          logoLink: resultsObjNew.logoLink,   
          backgroundImage:resultsObjNew.backgroundImage    
        });   
      }    
    ]);
  });

答案 1 :(得分:0)

我们可以使用这个

x=data.frame("p"=names(n),n)
y=data.frame("p"=names(m),m)


merged = merge (x , y, by ="p", all.x = TRUE)

并取代" NA"零,我们有

merged[is.na(merged)] <- 0

输出

    p n m
  1 1 3 9
  2 2 5 7
  3 3 2 0
  4 4 9 0
  5 5 8 2