1) dplyr/tidyr , , , . Variable Price Sales, Value , . , .
library(dplyr)
library(tidyr)
DF %>%
gather(new, Value, -Brand) %>%
separate(new, c("Country", "Variable", "Year"), sep = "__") %>%
spread(Variable, Value) %>%
arrange(Brand, desc(Country), desc(Year))
:
Brand Country Year Sales
1 Skittles UK YA 75
2 Skittles UK MAT 80
3 Skittles CN YA 105
4 Skittles CN MAT 130
5 Snickers UK YA 100
6 Snickers UK MAT 110
7 Snickers CN YA 90
8 Snickers CN MAT 95
9 Twix UK YA 50
10 Twix UK MAT 60
11 Twix CN YA 30
12 Twix CN MAT 35
, DF2
, .
1a) , DF
, DF2
. , arrange
, .
DF %>%
gather(new, Sales, -Brand) %>%
separate(new, c("Country", "Year"), sep = "__Sales__") %>%
arrange(Brand, desc(Country), desc(Year))
2) , reshape
. , , rownames(long) <- NULL
. DF2
.
varying <- split(names(DF)[-1], sub(".*__(.*)__.*", "\\1", names(DF)[-1]))
long <- reshape(DF, dir = "long", idvar = "Brand", varying = varying,
v.names = names(varying))
out <- transform(long, Country = sub("__.*", "", time), Year = sub(".*__", "", time),
time = NULL)
rownames(out) <- NULL
o <- with(out, order(Brand, -xtfrm(Country), -xtfrm(Year)))
out <- out[o, ]
out
:
Brand Sales Country Year
3 Skittles 75 UK YA
6 Skittles 80 UK MAT
9 Skittles 105 CN YA
12 Skittles 130 CN MAT
1 Snickers 100 UK YA
4 Snickers 110 UK MAT
7 Snickers 90 CN YA
10 Snickers 95 CN MAT
2 Twix 50 UK YA
5 Twix 60 UK MAT
8 Twix 30 CN YA
11 Twix 35 CN MAT
Lines <- " Brand UK__Sales__YA UK__Sales__MAT CN__Sales__YA CN__Sales__MAT
1 Snickers 100 110 90 95
2 Twix 50 60 30 35
3 Skittles 75 80 105 130"
DF <- read.table(text = Lines)
DF2 <- cbind(DF, setNames(10 * DF[2:5], sub("Sales", "Price", names(DF)[2:5])))