Reputation: 520
I want to create a function that creates data frame in r from a column in another data frame, use the text from the creation of the call as the basis of the data labels in the data frame.
For example, I want to create create the following datasets for mpg
and am
using the mtcars
dataset as the basis.
## desired dataframe 1
# ---- NOTE: creates object
mtcars_specificed_column_object_mpg <-
data.frame(
mpg = mtcars$mpg,
variable = "mpg",
dataset = "mtcars"
)
# ---- NOTE: displays data head
head(mtcars_specificed_column_object_mpg)
mpg variable dataset
1 21.0 mpg mtcars
2 21.0 mpg mtcars
3 22.8 mpg mtcars
4 21.4 mpg mtcars
5 18.7 mpg mtcars
6 18.1 mpg mtcars
## desired dataframe 2
# ---- NOTE: creates object
mtcars_specificed_column_object_am <-
data.frame(
mpg = mtcars$am,
variable = "am",
dataset = "mtcars"
)
# ---- NOTE: displays data head
head(mtcars_specificed_column_object_am)
mpg variable dataset
1 1 am mtcars
2 1 am mtcars
3 1 am mtcars
4 0 am mtcars
5 0 am mtcars
6 0 am mtcars
I can do this by hand, but when I try to create a function, it doesn't work.
## attempt to create function
function_create_dataset_specificed_column_object <-
function(variable_name, dataset_name) {
# ---- NOTE: # creates data frame of variable, with unique values
dataset_specificed_column_object <-
data.frame(
variable_name = dataset_name$variable_name,
variable = "variable_name",
dataset = "dataset_name"
)
# ---- NOTE: returns appropriate object
return(dataset_specificed_column_object)
}
### using function
function_create_dataset_specificed_column_object(mpg, mtcars)
# ---- NOTE: function does not work
Is there any way to accomplish this task? Thanks ahead of time.
R code used to create post:
# base data frame
mtcars
## list of IVs of desired data frame
mtcars_IVs_of_interest_list$IVs <- c("mpg", "am")
mtcars_IVs_of_interest_list$dataset <- c("mtcars")
## desired dataframe 1
# ---- NOTE: creates object
mtcars_specificed_column_object_mpg <-
data.frame(
mpg = mtcars$mpg,
variable = "mpg",
dataset = "mtcars"
)
# ---- NOTE: displays data head
head(mtcars_specificed_column_object_mpg)
## desired dataframe 2
# ---- NOTE: creates object
mtcars_specificed_column_object_am <-
data.frame(
mpg = mtcars$am,
variable = "am",
dataset = "mtcars"
)
# ---- NOTE: displays data head
head(mtcars_specificed_column_object_am)
## attempt to create function
function_create_dataset_specificed_column_object <-
function(variable_name, dataset_name) {
# ---- NOTE: # creates data frame of variable, with unique values
dataset_specificed_column_object <-
data.frame(
variable_name = dataset_name$variable_name,
variable = "variable_name",
dataset = "dataset_name"
)
# ---- NOTE: returns appropriate object
return(dataset_specificed_column_object)
}
### using function
function_create_dataset_specificed_column_object(mpg, mtcars)
# ---- NOTE: function does not work
Upvotes: 0
Views: 25
Reputation: 887741
We can extract the object name with substitute
and convert it to string (deparse
). Also, use [[
instead of $
to extract the column
function_create_dataset_specificed_column_object <-
function(variable_name, dataset_name) {
colnm <- deparse(substitute(variable_name))
nm1 <- deparse(substitute(dataset_name))
dataset_specificed_column_object <-
data.frame(
variable_name = dataset_name[[colnm]],
variable = colnm,
dataset = nm1
)
names(dataset_specificed_column_object)[1] <- colnm
return(dataset_specificed_column_object)
}
-testing
function_create_dataset_specificed_column_object(mpg, mtcars)
# mpg variable dataset
#1 21.0 mpg mtcars
#2 21.0 mpg mtcars
#3 22.8 mpg mtcars
#4 21.4 mpg mtcars
#5 18.7 mpg mtcars
#6 18.1 mpg mtcars
#7 14.3 mpg mtcars
#...
Upvotes: 1