【问题标题】:r - 'rbind' dataframes with different prefix in column namesr - 列名中具有不同前缀的“rbind”数据帧
【发布时间】:2019-05-02 14:11:13
【问题描述】:

我有两个如下数据框:

df1 <- data.frame(ID = c(1:4),
       Year = 2001,
       a_Var1 = c("A","B","C","D"),
       a_Var2 = c("T","F","F","T"))

df2 <- data.frame(ID = c(1:4),
       Year = 2002,
       b_Var1 = c("E","F","G","H"))

所需的最终产品是

df_combined <- data.frame(ID = c(1,1,2,2,3,3,4,4),
                      Year = c(2001,2002,2001,2002,2001,2002,2001,2002),
                      Var1 = c("A","E","B","F","C","G","D","H"),
                      Var2 = c("T",NA,"F",NA,"F",NA,"T",NA))

问题是如何'rbind' 以去除前缀a_b_Var1Var2 等成为新列。

尝试了plyrrbind.fill,但这并没有解决问题。

【问题讨论】:

  • 您想在绑定之前从列名中删除a_b_ 等吗? dplyr::rename_allpurrr::set_names 使用正则表达式很方便
  • 谢谢。我不希望只是结合 dfs,但会记住这种方法以备不时之需

标签: r dataframe tidyverse rbind


【解决方案1】:

这是一种选择。将数据集放在listrename 中,方法是通过“ID”删除包括_arrange 的前缀部分

library(tidyverse)
map_df(list(df1, df2), ~ .x %>% 
             rename_all(~ str_remove(.x, "^[^_]+_"))) %>%
   arrange(ID)
#  ID Year Var1 Var2
#1  1 2001    A    T
#2  1 2002    E <NA>
#3  2 2001    B    F
#4  2 2002    F <NA>
#5  3 2001    C    F
#6  3 2002    G <NA>
#7  4 2001    D    T
#8  4 2002    H <NA>

【讨论】:

  • 谢谢阿克伦!您能否对您的答案稍作修改 - 您能否使代码考虑所有数据帧中的所有变量(即不需要单独指定“Var1”、“Var2”等)?跨度>
  • @JunranCao 我改了
  • 非常感谢!时间限制一到,我会尽快接受你的答复。
猜你喜欢
  • 2015-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 2018-05-02
  • 2022-10-02
相关资源
最近更新 更多