当使用sprintf时,R将因子转换为数字

时间:2015-11-03 13:40:22

标签: r printing casting printf

我遇到了一个奇怪的演员情况,如果有人能向我解释发生了什么,我会很感激。

我有一个变量(数据框中的一个单元格):

> missing_features[i,][j]
   aircraft_company_country
18           United Kingdom

变量的类是:

> sapply(missing_features[i,][j], class)
aircraft_company_country 
                "factor"

在我的脚本的某处,字符列已转换为因子。当我尝试使用print和sprintf打印它时,它会显示:

> print( missing_features[i,][j])

   aircraft_company_country
18           United Kingdom
> sprintf("%s",  missing_features[i,][j])
[1] "56"

使sprintf打印正确值的方法是:

> sprintf("%s", lapply( missing_features[i,][j], as.character))
[1] "United Kingdom"

发生了什么事?

1 个答案:

答案 0 :(得分:0)

您正在将data.frame传递给sprintf函数,但该函数并不受支持。您应使用sprintf而不是[[提取单个列以使用[进行格式化,如以下示例所示。

> missing_features <- data.frame(aircraft_company_country = c("United States", "United Kingdom"), foo = 1:2)
> i <- 2
> j <- 1
> str(missing_features[i,][j])
'data.frame':   1 obs. of  1 variable:
 $ aircraft_company_country: Factor w/ 2 levels "United Kingdom",..: 1
> str(missing_features[i,][[j]])
 Factor w/ 2 levels "United Kingdom",..: 1
> sprintf("%s", missing_features[i,][j])
[1] "1"
> sprintf("%s", missing_features[i,][[j]])
[1] "United Kingdom"