对readHTMLTable解析的因子列进行子集设置不会返回任何结果
我遇到了一个奇怪的子集问题。问题是我可以子集一列,但不能子集另一列。这两列似乎都是由readHTMLTable以相同的方式解析的 要复制的代码对readHTMLTable解析的因子列进行子集设置不会返回任何结果,r,R,我遇到了一个奇怪的子集问题。问题是我可以子集一列,但不能子集另一列。这两列似乎都是由readHTMLTable以相同的方式解析的 要复制的代码 require(XML) theurl <- "http://en.wikipedia.org/wiki/List_of_stock_exchanges" html <- htmlParse(theurl) seData <- readHTMLTable(html)[[2]] names(seData) = c("Rank","EX",
require(XML)
theurl <- "http://en.wikipedia.org/wiki/List_of_stock_exchanges"
html <- htmlParse(theurl)
seData <- readHTMLTable(html)[[2]]
names(seData) = c("Rank","EX","Economy","HQ","MarketCap","TradeValue")
seData = transform(seData,MarketCap = as.numeric(gsub(",","",MarketCap)))
seData = transform(seData,TradeValue = as.numeric(gsub(",","",TradeValue)))
我运行了其他函数,两列看起来完全相同
> sapply(seData,class)
Rank EX Economy HQ MarketCap TradeValue
"factor" "factor" "factor" "factor" "numeric" "numeric"
> levels(seData$Economy)
[1] " Australia" " Brazil" " Canada"
[4] " China" " Germany" " Hong Kong"
[7] " India" " Japan" " Russia"
...
> levels(seData$EX)
[1] "Australian Securities Exchange" "BME Spanish Exchanges"
[3] "BM&F Bovespa" "Bombay Stock Exchange"
[5] "Deutsche Börse" "Hong Kong Stock Exchange"
[7] "JSE Limited" "Korea Exchange"
...
我错过了什么?我使用的子集命令有什么问题吗(
正如我在评论中提到的,这个问题主要是由于数据中的非标准字符引起的,我猜这是由于字符编码设置引起的 您可能希望使用标准的
[
子集和grepl
grepl
将为您提供逻辑值向量,然后您可以使用该向量对数据帧进行子集。这允许您进行部分匹配以及额外的奖励
> seData[grepl('India', seData$EX),]
Rank EX Economy HQ MarketCap TradeValue
11 11 National Stock Exchange of India  India Mumbai 1234 442
编辑
grepl
也将在subset
函数中工作
> subset(seData, grepl('India', seData$EX) )
Rank EX Economy HQ MarketCap TradeValue
11 11 National Stock Exchange of India  India Mumbai 1234 442
很可能你的数据有一些奇怪的字符,这在解析来自web的数据时是很典型的。例如,如果我运行你的代码,我看到的是
India
,而不仅仅是India
。此外,在子集
调用中,你不需要重命名数据集,也就是说,一旦你的字符集正确,子集(statista,Economy==“India”)
应该能用。谢谢@shujaa,这将从现在起节省一些打字能力。谢谢geektrader!真不敢相信我花了几个小时在这上面……它能用!
subset(seData,seData$Economy == " India")
> seData[grepl('India', seData$EX),]
Rank EX Economy HQ MarketCap TradeValue
11 11 National Stock Exchange of India  India Mumbai 1234 442
> subset(seData, grepl('India', seData$EX) )
Rank EX Economy HQ MarketCap TradeValue
11 11 National Stock Exchange of India  India Mumbai 1234 442