首页 > 解决方案 > R通过将名称与df列值匹配来填充向量

问题描述

我有一个用零填充的命名向量

toy1<- rep(0, length(37:45))
names(toy1) <- 37:45

我想用数据框中的计数数据填充向量

size    count
37      1.181
38      0.421
39      0.054
40      0.005
41      0.031
42      0.582
45      0.024

我需要帮助找到一种将大小值与向量名称相匹配的方法,然后将相应的计数值输入到该向量位置

标签: r

解决方案


可能很简单:

toy1[ as.character(dat$size) ] <- dat$count
toy1

#   37    38    39    40    41    42    43    44    45 
#1.181 0.421 0.054 0.005 0.031 0.582 0.000 0.000 0.024 

R 的赋值索引可以有字符值。如果您刚刚尝试使用原始列进行索引:

toy1[ dat$size ] <- dat$count

你会得到(就像我最初一样):

> toy1
   37    38    39    40    41    42    43    44    45                                                             
0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA 

   NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA    NA 1.181 0.421 

0.054 0.005 0.031 0.582    NA    NA 0.024 

发生这种情况是因为发生了数字索引,并且默认扩展了向量的长度以容纳最多 45 个数字。

对于一个数字不在 37:45 范围内的数据框版本,我确实收到了使用matchnomatch 为 0 的警告,但我也得到了预期的结果:

toy1[ match( as.character( dat$size), names(toy1) , nomatch=0) ] <- dat$count
#------------
Warning message:
In toy1[match(as.character(dat$size), names(toy1), nomatch = 0)] <- dat$count :
  number of items to replace is not a multiple of replacement length
> toy1
   37    38    39    40    41    42    43    44    45 
1.181 0.421 0.054 0.005 0.031 0.582 0.000 0.000 0.000 

match功能是该功能的核心,但此应用程序将比数据帧merge快得多merge


推荐阅读