在保留类的同时从R中的paste()输出中删除引号

时间:2014-09-03 13:30:31

标签: r

我有一个数据框“c1”,其中一列为“region”。

sum(is.na(c1$region))
[1] 2

class(c1$region)
[1] "factor"

但是,当我使用paste()

f1<-paste("c1","$","region",sep="")

> f1
[1] "c1$region"

> sum(is.na(f1))
[1] 0

我试过as.name(f1)和as.symbol(f1)。两者都将f1转换为“name”类。 noquote(f1)将char [1]元素转换为“noquote”类。

> f2<-as.name(f1)

> f2
`c1$region`

> sum(is.na(f2))
[1] 0
Warning message:
In is.na(f2) : is.na() applied to non-(list or vector) of type 'symbol'

> class(f2)
[1] "name"

我希望保留c1 $区域的类,同时能够在sum(is.na(f2))等查询中使用它。请帮忙。

1 个答案:

答案 0 :(得分:0)

我不是百分百肯定我明白你要做什么,但也许这会有所帮助:

c1 <- data.frame(region=c(letters[1:3], NA))
clust <- 1
variable <- "region"

f1 <- get(paste0("c", clust))[[variable]]   # <--- key step
class(f1)
# [1] "factor"
sum(is.na(f1))
# [1] 1

在关键步骤中,我们使用get使用其名称作为字符向量来获取正确的群集数据框,然后我们使用[[,这与$不同,允许我们使用字符变量来指定我们想要的列。