使用链运算符在 R 中以字符串作为因子读取 Data.Frames = False

Reading in Data.Frames with Strings as factors = False in R using chain operator

我有一个 table 源读取数据框。我知道默认情况下,外部源作为因素读入数据框。我想在下面的数据框调用中应用 stringsAsFactors=FALSE,但这样做会引发错误。我还能使用链接并转 stringsAsFactors=FALSE 吗?

library(rvest)
pvbData <- read_html(pvbURL)
pvbDF <- pvbData %>%
html_nodes(xpath = `//*[@id="ajax_result_table"]`) %>% 
html_table() %>% 
data.frame()

data.frame(,stringsAsFactors=FALSE)  <- Throws an error

我知道这可能非常简单,但我很难找到一种方法来完成这项工作。感谢您的帮助。

虽然如果您正在应用链接,该语句在逻辑上应该是 data.frame(stringsAsFactors=FALSE),但即使是该语句也不会产生所需的输出。

原因是对stringsAsFactors选项的使用存在误解。此选项仅在逐列设置 data.frame 时有效。示例:

a <- data.frame(x = c('a','b'),y=c(1,2),stringsAsFactors = T)
str(a)

'data.frame':   2 obs. of  2 variables:
 $ x: Factor w/ 2 levels "a","b": 1 2
 $ y: num  1 2

a <- data.frame(x = c('a','b'),y=c(1,2),stringsAsFactors = F)
str(a)

'data.frame':   2 obs. of  2 variables:
 $ x: chr  "a" "b"
 $ y: num  1 2

如果您将 data.frame 作为输入,stringsAsFactors 选项将不起作用

解决方案:

将链接结果存储到这样的变量中:

library(rvest)
pvbData <- read_html(pvbURL)
pvbDF <- pvbData %>%
html_nodes(xpath = `//*[@id="ajax_result_table"]`) %>% 
html_table()

然后应用这个命令:

data.frame(as.list(pvbDF),stringsAsFactors=F)

更新:

如果该列已经是一个因子,则不能使用此命令将其转换为字符向量。最好先 as.character 然后重试。

详情请参考Change stringsAsFactors settings for data.frame