Skip to content

Commit

Permalink
Merge pull request #74 from hadley/feature/31-dub
Browse files Browse the repository at this point in the history
- New `enframe()` that converts vectors to two-column tibbles (#31, #74).
  • Loading branch information
krlmlr committed May 11, 2016
2 parents 6c3b51c + a30fa66 commit eeb01a3
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 0 deletions.
1 change: 1 addition & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export(as_data_frame)
export(column_to_rownames)
export(data_frame)
export(data_frame_)
export(enframe)
export(frame_data)
export(glimpse)
export(has_rownames)
Expand Down
24 changes: 24 additions & 0 deletions R/enframe.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#' Converting atomic vectors to data frames
#'
#' A helper function that converts named atomic vectors or lists to two-column
#' data frames.
#' For unnamed vectors, the natural sequence is used as name column.
#'
#' @param x An atomic vector
#' @param name,value Names of the columns that store the names and values
#'
#' @return A \code{\link{data_frame}}
#' @export
#'
#' @examples
#' enframe(1:3)
#' enframe(c(a = 5, b = 7))
enframe <- function(x, name = "name", value = "value") {
if (is.null(names(x))) {
df <- data_frame(seq_along(x), x)
} else {
df <- data_frame(names(x), unname(x))
}
names(df) <- c(name, value)
df
}
26 changes: 26 additions & 0 deletions man/enframe.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions tests/testthat/test-enframe.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
context("enframe")

test_that("can convert unnamed vector", {
expect_identical(enframe(3:1),
data_frame(name = 1:3, value = 3:1))
})

test_that("can convert named vector", {
expect_identical(enframe(c(a = 2, b = 1)),
data_frame(name = letters[1:2], value = as.numeric(2:1)))
})

test_that("can convert zero-length vector", {
expect_identical(enframe(logical()),
data_frame(name = integer(), value = logical()))
})

test_that("can use custom names", {
expect_identical(enframe(letters, name = "index", value = "letter"),
data_frame(index = seq_along(letters),
letter = letters))
})

0 comments on commit eeb01a3

Please sign in to comment.