我有一个数据框“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))等查询中使用它。请帮忙。
答案 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
使用其名称作为字符向量来获取正确的群集数据框,然后我们使用[[
,这与$
不同,允许我们使用字符变量来指定我们想要的列。