У меня возникла проблема при использовании подмножества 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, а не только пикап и умный автомобиль.
Только ddply()
производит следующий вывод:
ddply(big_sales_df, .(ITEM), "nrow")
ITEM nrow
1 Pickup Truck 1
2 Smart Car 2
Поскольку в примере небольшое количество ITEM, график все еще читабельный, но в реальной жизни я пытаюсь построить имена медленных веб-страниц, и, к сожалению, 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!
Атиш