R:使用索引向量中的值(包括NA)将列添加到数据框

时间:2018-04-02 02:12:12

标签: r dataframe vector indexing

我有一个数据框,其值列包含NA,如下所示:

> set.seed(1)
> mydf <- data.frame(name=LETTERS[1:10], col1=rnorm(10, 2, 1))
> mydf
   name     col1
1     A 1.373546
2     B 2.183643
3     C 1.164371
4     D 3.595281
5     E 2.329508
6     F 1.179532
7     G 2.487429
8     H 2.738325
9     I 2.575781
10    J 1.694612

现在我想添加另一个我存储在数字向量中的列。这个向量告诉我应该插入每个值的索引(行),但不包括缺失索引的NA:

> a <- rnorm(6,5,2)
> names(a) <- c(2,4,5,7,8,10)
> a
        2         4         5         7         8        10 
8.0235623 5.7796865 3.7575188 0.5706002 7.2498618 4.9101328 

我想在{(1}}名称后面添加a作为mydf列,以便a看起来像这样:

mydf

这应该很简单,但无法理解它。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这可以为您提供所需的结果。

merge(mydf, a, by = 'row.names', all.x = TRUE)[,-1]

答案 1 :(得分:1)

我们可以使用col2初始化新列(NA),然后从names的{​​{1}}中提取特定索引,并将其替换为{{1}的值}}

a

<强>更新

根据OP的注释,如果行索引以某个任意数字开头,则上述内容不能给出正确的答案。在这种情况下,我们需要a mydf$col2 <- NA mydf$col2[as.numeric(names(a))] <- a mydf # name col1 col2 #1 A 1.373546 NA #2 B 2.183643 8.0235623 #3 C 1.164371 NA #4 D 3.595281 5.7796865 #5 E 2.329508 3.7575188 #6 F 1.179532 NA #7 G 2.487429 0.5706002 #8 H 2.738325 7.2498618 #9 I 2.575781 NA #10 J 1.694612 4.9101328 match names a rownames并将相应的值分配给mydf。< / p>

col2