使用链式运算符读取带有字符串的Data.Frames作为因子= R在R中

时间:2016-04-19 02:22:31

标签: r dataframe chaining rvest

我有一个读取数据框的表源。我知道默认情况下,外部源被读入数据帧作为因素。我想在下面的数据框调用中应用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

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

1 个答案:

答案 0 :(得分:2)

虽然如果您正在应用链接,该语句应该在逻辑上为vis,但即使此语句也不会产生所需的输出。

原因是误解了data.frame(stringsAsFactors=FALSE)选项的使用。仅当您逐列创建data.frame时,此选项才有效。例如:

stringsAsFactors

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

解决方案:

将链接结果存储到如下变量:

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

然后应用此命令:

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

更新

如果列已经是一个因子,那么您无法使用此命令将其转换为字符向量。最好先改变它,然后重试。

您可以参考Change stringsAsFactors settings for data.frame了解更多详情。