df <- data.frame(key = c("x", "y", "z"), val = 1:3)
pv <- pivot_wider(df, names_from = "key", values_from = "val")
expect_equal(names(pv), c("x", "y", "z"))
expect_equal(nrow(pv), 1)
df <- data.frame(a = 1, key = c("x", "y"), val = 1:2)
pv <- pivot_wider(df, names_from = "key", values_from = "val")
expect_equal(names(pv), c("a", "x", "y"))
expect_equal(nrow(pv), 1)
df <- data.frame(a = 1:2, key = c("x", "y"), val = 1:2)
pv <- pivot_wider(df, names_from = "key", values_from = "val")
expect_equal(pv$a, c(1, 2))
expect_equal(pv$x, c(1, NA))
expect_equal(pv$y, c(NA, 2))
df <- data.frame(
a = c(1, 1),
key = c("a", "b"),
val = c(1, 2)
)
expect_error(
pivot_wider(df, names_from = "key", values_from = "val"),
pattern = "Some values of the columns specified"
)
df <- data.frame(
variable = c("a", "b", "c"),
date = c("2015-01-01", "2015-01-01", "2015-01-02"),
value = c(1, 2, 3),
stringsAsFactors = FALSE
)
res <- df %>% pivot_wider(
names_from = "date",
values_from = "value",
values_fill = 0
)
expect_equal(
res,
structure(
list(variable = c("a", "b", "c"), `2015-01-01` = c(1, 2, 0), `2015-01-02` = c(0, 0, 3)),
row.names = c(NA, 3L),
class = "data.frame"
)
)
production <- expand.grid(
product = c("A", "B"),
country = c("AI", "EI"),
year = 2000:2014
) %>%
filter((product == "A" & country == "AI") | product == "B")
production$production <- rnorm(nrow(production))
res <- production %>%
pivot_wider(
names_from = c("product", "country"),
values_from = "production"
)
expect_equal(dim(res), c(15, 4))
expect_equal(colnames(res), c("year", "A_AI", "B_AI", "B_EI"))
res <- production %>%
pivot_wider(
names_from = c("product", "country"),
values_from = "production",
names_glue = "prod_{product}_{country}"
)
expect_equal(colnames(res), c("year", "prod_A_AI", "prod_B_AI", "prod_B_EI"))
res <- production %>%
pivot_wider(
names_from = c("product", "country"),
values_from = "production",
names_sep = "."
)
expect_equal(colnames(res), c("year", "A.AI", "B.AI", "B.EI"))
contacts <- data.frame(
field = c("name", "company", "name", "company", "email", "name"),
value = c("Jiena McLellan", "Toyota", "John Smith", "google", "john@google.com", "Huxley Ratcliffe"),
stringsAsFactors = FALSE
)
contacts$person_id <- cumsum(contacts$field == "name")
res <- contacts %>%
pivot_wider(names_from = "field", values_from = "value")
expect_equal(
res,
structure(
list(
person_id = 1:3,
name = c("Jiena McLellan", "John Smith", "Huxley Ratcliffe"),
company = c("Toyota", "google", NA),
email = c(NA, "john@google.com", NA)
),
row.names = c(NA, 3L),
class = "data.frame"
)
)
df <- data.frame(
food = c("banana", "banana", "banana", "banana", "cheese", "cheese", "cheese", "cheese"),
binary = c(rep(c("yes", "no"), 4)),
car = c("toyota", "subaru", "mazda", "skoda", "toyota", "subaru", "mazda", "skoda"),
fun = c(2, 4, 3, 6, 2, 4, 2, 3),
stringsAsFactors = FALSE
)
res <- df %>%
pivot_wider(
id_cols = "food",
names_from = c("car", "binary"),
names_glue = "{binary}_{car}",
values_from = "fun"
)
expect_equal(
res,
structure(
list(
food = c("banana", "cheese"), yes_toyota = c(2, 2), no_subaru = c(4, 4), yes_mazda = c(3, 2), no_skoda = c(6, 3)
),
row.names = 1:2,
class = "data.frame"
)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.