对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",

我遇到了一个奇怪的子集问题。问题是我可以子集一列,但不能子集另一列。这两列似乎都是由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","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