我有一个数据框,其值列包含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
这应该很简单,但无法理解它。谢谢你的帮助!
答案 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