【问题标题】:Binding dataframe rows with both characters and integers使用字符和整数绑定数据帧行
【发布时间】:2018-10-31 14:54:29
【问题描述】:

我有两组数据,7 个变量的 2 个 obs。

我正在尝试生成一组数据(数据框),它是我目前拥有的两组的组合。

例如,目标是拥有一组数据,即 4 个 obs 的 7 个变量。只需将第二个数据集的行添加到下面的其他行。基本上只是试图创建一个更大的表,其中包含更多由我拥有的行组成的行。

我尝试过的事情包括安装 dplyr:

rbind(df1,df2)

rbind(df1,df2, .is=NULL)

我有一个错误:

Error in match.names(clabs, names(xi)) : 
  names do not match previous name

我相信这是由于从 csv 文件生成我的数据,该文件包含我的第一个数据集的标题作为列标题,而第二个数据集具有不同的标题,因为它是从文件的更下方读取的,因此标题是 x1,x1.1 等...

所以我尝试了 unnamed() 也失败了。

然后我尝试了

bind_rows(df1,df2)

但它给了我一个 4x14 的数据集。 我也在其他地方遇到了错误

错误:与STRSXP不兼容

我认为问题在于我的数据框可能存储为列表,以及一些列作为字符和一些列作为数字的数据。

【问题讨论】:

  • 只需在使用rbindbind_rows 之前执行names(df2) <- names(df1)。这假定两个数据框中的列顺序相同。

标签: r list dataframe dplyr


【解决方案1】:

我不确定我是否正确,但您可能会遇到不同的列名和数据类型。

你可以做什么:

1) colnames(df1)colnames(df2):你们有相同的列名吗?

2) 然后试试str(df1)str(df2) 看看有没有区别。

3) 如果您的数据帧存储为列表,请将它们转换回数据帧。

ad 1) 如果列名是您可以做的问题:

colnames(df2) <- colnames(df1)
rbind(df1,df2)

ad 2)如果还是不行,而且数据类型不同,让它们相互匹配,然后再次尝试绑定行。

ad 3) 如果您的数据框是列表,因此无法正常工作,请尝试:

library(dplyr)
bind_rows(bind_rows(df1), bind_rows(df2))

【讨论】:

    【解决方案2】:

    如果我了解您的数据框中的数据类型不同的问题。一个解决方案可能是:

    library(dplyr)
    library(hablar)
    
    # Example data sets
    df1 <- data.frame(a = c(1L, 2L))
    df2 <- data.frame(a = c("1", "2"), stringsAsFactors = F)
    
    # Solution
    df1 <- df1 %>% retype()
    df2 <- df2 %>% retype()
    
    bind_rows(df1, df2)
    

    这给出了一个合并的数据框:

    # A tibble: 4 x 1
          a
      <int>
    1     1
    2     2
    3     1
    4     2
    

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 2019-01-22
      • 2018-08-22
      • 2014-07-31
      • 1970-01-01
      • 2020-05-04
      • 2021-01-01
      • 2018-10-17
      相关资源
      最近更新 更多