Hanna
Hanna

Reputation: 23

R - reshaped data from wide to long format, now want to use created timevar as factor

I am working with longitudinal data and assess the utilization of a policy over 13 months. In oder to get some barplots with the different months on my x-axis, I converted my data from wide Format to Long Format.

So now, my dataset looks like this

id month hours
1   1     13
1   2     16
1   3     20
2   1     0
2   2     0
2   3     10

I thought, after reshaping I could easily use my newly created "month" variable as a factor and plot some graphs.
However, it does not work out and tells me it's a list or an atomic vector. Transforming it into a factor did not work out - I would desperately Need it as a factor.

Does anybody know how to turn it into a factor?

Thank you very much for your help!

EDIT.

The OP's graph code was posted in a comment. Here it is.

library(ggplot2)

ggplot(data, aes(x = hours, y = month)) + geom_density() + labs(title = 'Distribution of hours') 

Upvotes: 1

Views: 184

Answers (2)

Rui Barradas
Rui Barradas

Reputation: 76402

The problem seems to be in the aes. geom_density only needs a x value, if you think about it a little, y doesn't make sense. You want the density of the x values, so on the vertical axis the values will be the values of that density, not some other values present in the dataset.

First, read in the data.

Indirekte_long <- read.table(text = "
id month hours
1   1     13
1   2     16
1   3     20
2   1     0
2   2     0
2   3     10
", header = TRUE)

Now graph it.

library(ggplot2)

g <- ggplot(Indirekte_long, aes(hours))
g + geom_density() + labs(title = 'Distribution of hours') 

Upvotes: 2

Esben Eickhardt
Esben Eickhardt

Reputation: 3842

# Loading ggplot2
library(ggplot2)

# Placing example in dataframe
data <- read.table(text = "
id month hours
1   1     13
1   2     16
1   3     20
2   1     0
2   2     0
2   3     10
", header = TRUE)

# Converting month to factor
data$month <- factor(data$month, levels = 1:12, labels = 1:12)

# Plotting grouping by id
ggplot(data, aes(x = month, y = hours, group = id, color = factor(id))) + geom_line()

# Plotting hour density by month
ggplot(data, aes(hours, color = month)) + geom_density()

enter image description here

Upvotes: 2

Related Questions