【问题标题】:rbind to datatables and make a new column in Rrbind 到数据表并在 R 中创建一个新列
【发布时间】:2022-11-22 22:00:09
【问题描述】:

嗨,我有两个代表不同组的数据集:

student_details <- c("John", "Henrick", "Maria", "Lucas", "Ali")
student_class <- c("High School", "College", "Preschool", "High School", "college")
df1 <- data.frame(student_details, student_class)

#另一个数据框

Student_details<-c("Bracy","Evin")
Student_class<-c("High school","College")
Student_rank<-c("A","A+")
df2<-data.frame(Student_class,Student_details,Student_rank)

df2

我需要 rbind df1 和 df2 即使长度不相等,并在最后一个名为“数据集”的第三列中指示它来自哪个数据集:

【问题讨论】:

  • 请添加预期输出。我想你想要cbind...

标签: r dataframe data.table rbind


【解决方案1】:

我假设您的列名 student_details,student_class 在数据框中是相同的。您可以使用比 rbind 更灵活的 bind_rows。 它将创建 NA 值。

student_details <- c("John", "Henrick", "Maria", "Lucas", "Ali")
student_class <- c("High School", "College", "Preschool", "High School", "college")
df1 <- data.frame(student_details, student_class)


student_details<-c("Bracy","Evin")
student_class<-c("High school","College")
student_rank<-c("A","A+")
df2<-data.frame(student_details,student_class,student_rank)

library(dplyr)

df_full<-bind_rows(df1,df2)

【讨论】:

    【解决方案2】:

    您可以使用 data.table 包中的 rbindlist() 函数来完成此操作。

    两个数据框中的列名相同很重要,因为您要按列名绑定。

    #convert uppercase letters in column names to lower case. 
    names(df2) <- tolower(names(df2))
    

    接下来,将它们绑定在一起:

    library(data.table)
    final_df <- rbindlist(list(df1, df2), use.names = T, fill = T, idcol = "dataset")
    final_df 
    

    输出:

       dataset student_details student_class student_rank
    1:       1            John   High School         <NA>
    2:       1         Henrick       College         <NA>
    3:       1           Maria     Preschool         <NA>
    4:       1           Lucas   High School         <NA>
    5:       1             Ali       college         <NA>
    6:       2           Bracy   High school            A
    7:       2            Evin       College           A+
    

    【讨论】:

    • 使用rbindlist 的好方法,轻松解决问题,+1!
    【解决方案3】:

    使用您的特定 df1df2,我们可以从 base R 尝试 merge

    > merge(df1, df2, all = TRUE, sort = FALSE)
      student_details student_class student_rank
    1            John   High School         <NA>
    2         Henrick       College         <NA>
    3           Maria     Preschool         <NA>
    4           Lucas   High School         <NA>
    5             Ali       college         <NA>
    6           Bracy   High school            A
    7            Evin       College           A+
    

    但是使用rbindlistdata.table选项应该在一般意义上起作用(参见@Flap的回答)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 2021-07-06
      • 2020-09-17
      相关资源
      最近更新 更多