我有一個問題,而使用data.frame
的一個子集R.不需要的物品
子集被創建並正確顯示出來,但是當我嘗試使用qplot()
繪製它,沒有被選擇的行沿subset()
也沿着一個軸顯示。
我讀在實際的文件是一個Web服務器日誌,但我已經創建了一個小例子來說明我的問題:
這是ITEMSSOLD.CSV
文件我在讀:
CUST,DT,ITEM,PRICE
BigJoe,10/13/2010,Pickup Truck,20000
TightWad,10/13/2010,USB Drive,12
Jane,10/13/2010,Smart Car,30000
Scrooge,10/13/2010,Gumdrops,1
GeekyMan,10/13/2010,Smart Car,30000
我閱讀到一個數據幀如下:
sales_df <- read.table("C:/R_Expt/ItemsSold.csv", header=TRUE, sep=",")
我那時的一個子集,以獲得高門票項目如下:
big_sales_df <- subset(sales_df, PRICE>100)
big_sales_df
big_sales_df
CUST DT ITEM PRICE
1 BigJoe 10/13/2010 Pickup Truck 20000
3 Jane 10/13/2010 Smart Car 30000
5 GeekyMan 10/13/2010 Smart Car 30000
這樣看起來沒問題。
當我嘗試通過qplot
如下繪製它:
qplot(nrow, ITEM, data = ddply(big_sales_df, .(ITEM), "nrow"))
所產生的圖顯示所有的在Y軸上的項目,而不是唯一的皮卡和 智能汽車。
獨ddply()
輸出如下:
ddply(big_sales_df, .(ITEM), "nrow")
ITEM nrow
1 Pickup Truck 1
2 Smart Car 2
由於例如有一個小數量的項目,該地塊仍是可讀的,但在現實生活中,我試圖繪製慢網頁的名稱頁面,不幸的是,qplot()
嘗試將所有網頁的名稱沿Y軸放置,並且變成黑色模糊。
我試過sqldf()
也:
qplot(NSOLD, ITEM, data = sqldf('select ITEM, count(*) as NSOLD from big_sales_df group by ITEM order by count(*) desc'))
但這會產生相同的情節。
我的理解是subset()
是以某種方式在裏面傳遞完整的父信息,而不僅僅是匹配的行。
有什麼辦法告訴subset()
它應該只保留相關信息?
或者其他方式避開subset()
攜帶空的成員?
我知道一個蠻力方法可能是將subset()
的結果寫入另一個CSV文件,然後在data.frame
中讀回,但我確信有一個更簡單的方法。
非常感謝你的所有R大師!
Atish
非常感謝布蘭登,這工作就好了! – Atish 2010-10-21 22:23:23
我發佈了另一個答案,但是在劇情中原地相同。 IN qplot()用因子(ITEM)代替ITEM – 2010-10-21 22:25:49