当name是空字符串

时间:2016-09-23 17:54:59

标签: r

如果名称是空字符串(例如“”),如何从向量中提取元素(按名称)?

a <- c(15,25)
names(a) <- c("", "second")
a[names(a)[2]]
#second 
#    25 
#a[names(a)[1]]
#<NA> 
#  NA 
a
#       second 
#    15     25 

谢谢!

编辑:感谢您的建议,但他们不允许我需要的灵活性。我应该澄清我的预期目标。假设我有一个向量:

fvec <- c("hi", "hi", "hi", "", "")
# ["hi", "hi", "hi", "", ""]

现在我想将此向量制表,然后用包含样本计数的新字符串替换实例。

# ["hi (n=3)", "hi (n=3)", "hi (n=3)", " (n=2)", " (n=2)"]

我一直在使用:

tab <- table(fvec)
# fvec
#    hi 
#  2  3 
retval <- sprintf("%s (n=%d)", fvec, tab[fvec])
# "hi (n=3)" "hi (n=3)" "hi (n=3)" " (n=NA)"  " (n=NA)"

1 个答案:

答案 0 :(得分:2)

我们可以使用逻辑索引来提取元素

a[names(a)==""]

#15 

match

a[match("", names(a))]

关于OP sprintf的输出,我们可以使用match获得预期输出

sprintf("%s (n=%d)", fvec, tab[match(fvec, names(tab))])
#[1] "hi (n=3)" "hi (n=3)" "hi (n=3)" " (n=2)"   " (n=2)"