1

I have a list of single column dataframes. The dataframes have all the same rows and I would like to change the value of the single column to the name of the dataframe (Index in list).

So I wrote a function:

change_colname <- function(df_list) { name_vector <- names(df_list) for (i in length(name_vector)) { working_name = toString(name_vector[i]) working_df = df_list[i] colnames(working_df) <- working_name } } 

This returns:

Error in `colnames<-`(`*tmp*`, value = working_name) : attempt to set 'colnames' on an object with less than two dimensions 

Well, then I read about single column dataframes, that they are a problem in R and thought I could transpose the dataframe.

df_list <- lapply(df_list, function(x){t(x)}) df_list <- lapply(df_list, data.frame) 

Changed the function accordingly:

change_rowname <- function(df_list) { name_vector <- names(df_list) for (i in length(name_vector)) { working_name = toString(name_vector[i]) working_df = df_list[i] rownames(working_df) <- working_name } } 

This returns:

Error in `rownames<-`(`*tmp*`, value = working_name) : attempt to set 'rownames' on an object with no dimensions 

However something must be wrong in my function, since when I try in the console:

dim(df_list$df) 

It returns:

[1] 96 1 

and for the transposed:

[1] 1 96 

Hence written in the function:

print(dim(working_df)) 

it returns:

NULL 

but:

print(working_df) 

returns the entire dataframe.

Does anybody know what is the problem here?

Thanks in advance and best regards Lukas

0

1 Answer 1

1

How about mapply:

df_list <- list(df1 = data.frame(x = seq_len(3)), df2 = data.frame(x = seq_len(4))) df_list_renamed <- mapply(setNames, object = df_list, nm = names(df_list), SIMPLIFY = FALSE) 

In this context also see this article on drop = FALSE with data.frames.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.