Hier ist eine Möglichkeit, Tweets am Tag zu zählen. Ich habe mit einem vereinfachten gefälschten Datensatz dargestellt:
library(dplyr)
library(lubridate)
# Fake data
set.seed(485)
dat = data.frame(time = seq(as.POSIXct("2016-01-01"),as.POSIXct("2016-12-31"), length.out=10000),
what = sample(LETTERS, 10000, replace=TRUE))
tweet.summary = dat %>% group_by(day = date(time)) %>% # To summarise by month: group_by(month = month(time, label=TRUE))
summarise(total.tweets = n(),
A.tweets = sum(grepl("A", what)),
pct.A = A.tweets/total.tweets,
B.tweets = sum(grepl("B", what)),
pct.B = B.tweets/total.tweets)
tweet.summary
day total.tweets A.tweets pct.A B.tweets pct.B
1 2016-01-01 28 3 0.10714286 0 0.00000000
2 2016-01-02 27 0 0.00000000 1 0.03703704
3 2016-01-03 28 4 0.14285714 1 0.03571429
4 2016-01-04 27 2 0.07407407 2 0.07407407
...
Hier ist ein Weg, um die Daten zu zeichnen ggplot2
verwenden. Ich habe zusammengefasst auch den Datenrahmen im Fluge innerhalb ggplot, mit den dplyr
und reshape2
Pakete:
library(ggplot2)
library(reshape2)
library(scales)
ggplot(dat %>% group_by(Month = month(time, label=TRUE)) %>%
summarise(A = sum(grepl("A", what))/n(),
B = sum(grepl("B", what))/n()) %>%
melt(id.var="Month"),
aes(Month, value, colour=variable, group=variable)) +
geom_line() +
theme_bw() +
scale_y_continuous(limits=c(0,0.06), labels=percent_format()) +
labs(colour="", y="")
In Bezug auf Ihre Datumsformatierung Problem, hier ist, wie numerische Daten zu bekommen: Sie können die Wende Geben Sie unter "as.Date
" Tages- und Jahresspalten in ein Datum ein und/oder stellen Sie die Spalten "Tag", "Monat", "Jahr" und "Uhrzeit" mithilfe von as.POSIXct
in eine Datums-/Uhrzeitspalte. Beide haben zugrunde liegende numerische Werte mit einer angefügten Datumsklasse, so dass R sie als Daten in Zeichenfunktionen und anderen Funktionen behandelt. Sobald Sie diese Konvertierung durchgeführt haben, können Sie den Code oben laufen Tweets von Tag zu zählen, Monat usw.
# Fake time data
dat2 = data.frame(day=sample(1:28, 10), month=sample(1:12,10), year=2016,
time = paste0(sample(c(paste0(0,0:9),10:12),10),":",sample(10:50,10)))
# Create date-time format column from existing day/month/year/time columns
dat2$posix.date = with(dat2, as.POSIXct(paste0(year,"-",
sprintf("%02d",month),"-",
sprintf("%02d", day)," ",
time)))
# Create date format column
dat2$date = with(dat2, as.Date(paste0(year,"-",
sprintf("%02d",month),"-",
sprintf("%02d", day))))
dat2
day month year time posix.date date
1 28 10 2016 01:44 2016-10-28 01:44:00 2016-10-28
2 22 6 2016 12:28 2016-06-22 12:28:00 2016-06-22
3 3 4 2016 11:46 2016-04-03 11:46:00 2016-04-03
4 15 8 2016 10:13 2016-08-15 10:13:00 2016-08-15
5 6 2 2016 06:32 2016-02-06 06:32:00 2016-02-06
6 2 12 2016 02:38 2016-12-02 02:38:00 2016-12-02
7 4 11 2016 00:27 2016-11-04 00:27:00 2016-11-04
8 12 3 2016 07:20 2016-03-12 07:20:00 2016-03-12
9 24 5 2016 08:47 2016-05-24 08:47:00 2016-05-24
10 27 1 2016 04:22 2016-01-27 04:22:00 2016-01-27
können Sie sehen, dass die zugrunde liegenden Werte eines POSIXct Datum sind numerisch (Anzahl der seit Mitternacht am 1. Januar 1970 verstrichenen Sekunden), indem as.numeric(dat2$posix.date)
getan wird. Ähnlich für ein Date-Objekt (Anzahl der Tage seit dem 1. Januar 1970): as.numeric(dat2$date)
.
Es sieht so aus, als ob Sie ein paar Probleme haben. Es kann ratsam sein, sie in kleinere Ausgaben mit getrennten Fragen aufzuteilen. –