R вырезать низкочастотные бины

Я пытаюсь отобразить частоты различных журналов в списке исследовательских работ, которые я получил. Каждая строка в моем фрейме данных соответствует статье, для которой у меня есть соответствующий журнал.

Я сделал следующее, чтобы отобразить уровни (ячейки) на гистограмме:

journal = main$Publication.Journal
tb <- table(journal)
barplot(tb[order(tb, decreasing=T)])
axis(2,at=seq(0, 12, 1), lab=seq(0, 12, 1))

journal_bins

Единственная проблема в том, что я хочу вырезать из графика (или самой таблицы) журналы с частотой 1, так как я пытаюсь наблюдать только самые частые журналы (отсюда и упорядоченная гистограмма). Любое понимание того, как я могу это сделать?

Большое спасибо! Натанаэль


person Ngg    schedule 28.05.2013    source источник
comment
вы можете отфильтровать те данные, которые вы не хотите отображать, например. с ?subset   -  person baptiste    schedule 29.05.2013


Ответы (3)


Или очень просто

tb <- tb[tb>1]

Объекты table являются подмножествами так же, как и любые объекты array.

person plannapus    schedule 29.05.2013
comment
Спасибо, это было намного проще, чем я ожидал! - person Ngg; 29.05.2013

Трудно ответить на вашу конкретную проблему без набора данных в вашем примере, поэтому вот одно решение, использующее фиктивный пример:

x <- rpois(100,100)
xt <- table(x)
xtd <- as.data.frame(xt)
xtds <- subset(xtd, Freq>1)  # use subset, as noted by @baptiste
plot(Freq ~ x, xtd, type="h", ylim=c(0,10))
lines(Freq ~ x, xtds, type="h", col="red")

введите здесь описание изображения

Я не знаю, можете ли вы легко принудить data.frame к table, насколько мне известно, поэтому вам может понадобиться другое решение. Также обратите внимание на результаты логического теста, например xt > 1, которые могут быть вам полезны.

person Andy Barbour    schedule 29.05.2013

Вы можете попробовать что-то вроде этого:

journal <- read.table(
  header=TRUE, text='Name  Article
JAMA    A
MAD B
Cigar_Afficianado   C
Bowling_Weekly  D
JAMA    E
MAD F
Cigar_Afficianado   G
JAMA    H
MAD I
Cigar_Afficianado   J
')# create data set
library(plyr)
table(journal$Name) # as in your example
journal <- ddply(journal, .(Name), transform, Article_count = length(Article))
journal #shows new column from transform in plyr with a count of articles
journal <- journal[journal$Article_count > 1, ] #removes the low counts
journal #shows that the low counts are removed
person Jack Ryan    schedule 29.05.2013