I’m having following problem while doing some analysis with R.
I have a dataframe like this:
Name | Group | Count Person 1 | A | 3 Person 2 | A | 1 Person 3 | A | 0 Person 1 | B | 5 Person 2 | B | 0 Person 3 | B | 1 Person 1 | C | 1
and I’d need to “expand” it (not sure if the right term) to be like this:
Person 1 | A Person 1 | A Person 1 | A Person 2 | A Person 1 | B Person 1 | B
etc.
So it takes value of pair Person 1 and A (in this example, 3) and makes three rows with Person 1 and A and does so for every Person – Group -combination. Can’t figure out any good words for searching online.
Answer
While it is a very useful package, I think reshape is overkill in this case, rep can do the job.
Here are some example data:
df <- data.frame(
name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
group=c("A", "A", "A", "B", "B", "B"),
count=c(3,1,0,5,0,1))
Now, to “expand” it:
expanded <- data.frame(name = rep(df$name, df$count),
group = rep(df$group, df$count))
I could not find a way to work directly on the data frame off the top of my head so I am working on each variable separately and then reassembling them, which is a bit ugly but should be OK as long as you take care of always using the same variable for the counts.
Attribution
Source : Link , Question Author : Juha-Matti S. , Answer Author : Gala