I am having trouble reproducing this error with an example list of dataframes, so bear with me...
Say you have the list of dataframes here:
#Example data frame columns
Image <- c("001", "001", "001", "001", "002", "002", "002", "002", "003", "003", "003", "003")
Size <- c("Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny")
n <- c(111778, 56, 7099, 3, 3682081, 88, 9078, 7, 198346, 422, 30077, 8)
#make example data frame
data <- data.frame(Image, Size, n)
#Split dataframe into a list of dataframes
df <- split(data, f = data$Image)
df
output:
$`001`
Image Size n
1 001 Big 111778
2 001 Small 56
3 001 Medium 7099
4 001 Tiny 3
$`002`
Image Size n
5 002 Big 3682081
6 002 Small 88
7 002 Medium 9078
8 002 Tiny 7
etc
See how the titles of the dataframes are $001
and $002
etc.
Problem
My own list of dataframes are named as NA
.
How do I
- Rename the list of dataframes, based on row names.
E.g. If I have a column in every dataframe called Label
, with repetitions of
$`NA`
Label Area
00017 ...
00017
00017
etc
#New dataframe
$`NA`
Label
00021
00021
00021
How do I replace the NA with the corresponding label? i.e. 00017 and 00021 etc.
I cannot go back and use the split function to rename, as some part of my data wrangling renames them NA. So it needs to be after all of this has occurred.
CodePudding user response:
This is probably a rookie answer as I am new to R, but in the past I have just merged the list of dataframes into one using
df_merged <- as.data.frame(data.table::rbindlist(df_original_list))
And then using the split function based on the label.
df <- split(df_merged, f = df_merged$Label)
To rename the elements inside the list.
There is probably a better and more experienced person who can answer, but hey it works so I just roll with it.
CodePudding user response:
You called them rownames, but they seem more like just values in the Label
column. Regardless, this should work.
> names(df) <- "NA"
> df
$`NA`
Image Size n
1 001 Big 111778
2 001 Small 56
3 001 Medium 7099
4 001 Tiny 3
$<NA>
Image Size n
5 002 Big 3682081
6 002 Small 88
7 002 Medium 9078
8 002 Tiny 7
$<NA>
Image Size n
9 003 Big 198346
10 003 Small 422
11 003 Medium 30077
12 003 Tiny 8
> for(i in 1:length(df)) names(df)[i] = df[[i]][1,1]
> df
$`001`
Image Size n
1 001 Big 111778
2 001 Small 56
3 001 Medium 7099
4 001 Tiny 3
$`002`
Image Size n
5 002 Big 3682081
6 002 Small 88
7 002 Medium 9078
8 002 Tiny 7
$`003`
Image Size n
9 003 Big 198346
10 003 Small 422
11 003 Medium 30077
12 003 Tiny 8