У меня проблема при использовании подмножества data.frame
в R.
Подмножество создается и отображается правильно, но когда я пытаюсь построить его, используя qplot()
, строки, которые не были выбраны subset()
, также отображаются вдоль одной оси.
Фактический файл, в котором я читаю, - это журнал веб-сервера, но я создал небольшой пример, иллюстрирующий мою проблему:
Это файл 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, а не только Пикап и
Smart Car.
Только 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-гуру!
Атиш