как добавить метку var поверх имени столбца

#r

#r

Вопрос:

У меня есть два data.frame, один для data (df), один для метки var (vl). введите описание изображения здесь

Как я могу объединить их вместе и получить, что выглядит следующим образом: введите описание изображения здесь

Примеры данных df и vl могут быть построены с использованием кодов:

 df<-structure(list(ID = c(1, 1, 1, 2, 2, 3, 3, 3), Date = c("Day 1", 
"Day 7", "Day 29", "Day_8", "Day9", "Day7", "Day.1", "Day 21"
), Score = c("A", "B", "E", "D", "F", "G", "A", "B"), Pass = c("Y", 
"Y", "N", "Y", "N", "N", "Y", "Y")), row.names = c(NA, -8L), class = c("tbl_df", 
"tbl", "data.frame"))

vl <-structure(list(Var = c("ID", "Score", "Pass", "Date"), Label = c("Subject ID", 
"Exam Score", "Pass or Fail the Exam", "Exam Date")), row.names = c(NA, 
-4L), class = c("tbl_df", "tbl", "data.frame"))
 

Ответ №1:

В R фреймы данных не могут иметь двойных имен столбцов, поэтому одним из способов было бы перенести ваши исходные имена столбцов в первую строку.

 setNames(rbind(names(df), df), vl$Label[match(names(df), vl$Var)])

#  `Subject ID` `Exam Date` `Exam Score` `Pass or Fail the Exam`
#  <chr>        <chr>       <chr>        <chr>                  
#1 ID           Date        Score        Pass                   
#2 1            Day 1       A            Y                      
#3 1            Day 7       B            Y                      
#4 1            Day 29      E            N                      
#5 2            Day_8       D            Y                      
#6 2            Day9        F            N                      
#7 3            Day7        G            N                      
#8 3            Day.1       A            Y                      
#9 3            Day 21      B            Y               
 

Комментарии:

1. Стоит предупредить, что это означает, что набор данных теперь практически непригоден для анализа.

2. Да — возможно, альтернативой может быть добавление «атрибута» к фрейму данных, который содержит эти метки переменных. Но это зависит от целей. Ответ Ронака делает то, что задал ОП.

3. @Ronak Shah Спасибо за предложение. Что делать, если у меня есть список lst1 , содержащий несколько data.frame. Что я должен сделать, чтобы применить один и тот же метод ко всем из них?

4. Используйте lapply on lst1 и используйте тот же код внутри функции.

5. @Ronak Shah ты имеешь в виду lapply (lst1, setNames(rbind(names(lst[[]]), lst1[[]]]), ...]) ? Не могли бы вы объяснить немного больше на примере. Мне трудно понять, как передать это через список. Спасибо.