2017-07-14 63 views
0

我有一个数据帧test的列是因素转换列字符与sapply

class(test) 
[1] "data.frame" 

sapply(test, class) 
    street  city state 
"factor" "factor" "factor" 

如果我尝试将这些列转换为字符与sapply(),不顺心的事,我不知道为什么

test <- as.data.frame(sapply(test, as.character)) 

sapply(test, class) 
    street  city state 
"factor" "factor" "factor" 

我希望输出是所有字符列。为什么列不转换,以及如何将所有因子列转换为字符?

下面是测试数据:

> dput(test) 
structure(list(street = structure(c(5L, 1L, 6L, 2L, 3L, 4L), .Label = c("12057 Wilshire Blvd", 
"15300 Sunset Boulevard", "17380 Sunset Blvd", "1898 Westwood Blvd.", 
"3006 Sepulveda Blvd.", "514 Palisades Drive"), class = "factor"), 
    city = structure(c(1L, 1L, 2L, 2L, 2L, 3L), .Label = c("Los Angeles", 
    "Pacific Palisades", "Westwood"), class = "factor"), state = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L), .Label = "CA", class = "factor")), .Names = c("street", 
"city", "state"), row.names = c(NA, -6L), class = "data.frame") 
+3

'sapply(data.frame(sapply(试验,as.character),stringsAsFactors = FALSE),类)' –

+3

澄清@分贝的注释,当你运行'as.data.frame'时,它会携带一个默认参数'stringsAsFactors = TRUE',它将撤销你在'sapply'中做的工作。 – Benjamin

回答

1

尝试mutate_if,这也应该给你更多的控制权:

mutate_if(test, is.factor, as.character) 
0

这应该做的伎俩,它将应用as.character功能,数据帧的每一列。该apply函数会返回一个矩阵,所以它只是需要被强制转换为数据帧通过包装它与as.data.frame

test <- as.data.frame(apply(test, 2, as.character), stringsAsFactors = FALSE) 
0

试试这个:

test[] <- lapply(test, as.character) 

或本:

test <- modifyList(test, lapply(test, as.character)) 

或:

test <- replace(test, TRUE, lapply(test, as.character))