#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
onlst1
и используйте тот же код внутри функции.5. @Ronak Shah ты имеешь в виду
lapply (lst1, setNames(rbind(names(lst[[]]), lst1[[]]]), ...])
? Не могли бы вы объяснить немного больше на примере. Мне трудно понять, как передать это через список. Спасибо.