【问题标题】:How to merge data frame and a string如何合并数据框和字符串
【发布时间】:2019-02-16 04:22:25
【问题描述】:

在 a=matrix(c(1,2,3,4),nrow=2,ncol=2) 和 b=c('name',3) 的情况下。我正在尝试合并 a 和 b 使得结果是第一行中的 [1 3 name 3] 和第二行中的 [2 4] 。

【问题讨论】:

  • (1) cbind 为您提供第一行。 (2) data.frame 在每一列中总是有相同数量的元素。时期。将NA 放在第二行第 3-4 列会更好吗?
  • cbind 也在为两行重复 [name 3],
  • 是的,请参阅我的注释 2。我怀疑这里对 R 的 data.frames 有误解。也许您可以(手动)创建一个data.frame,这应该是您的程序化合并的结果?目前,这个问题还不清楚,可能是由于对 R 数据结构的误解或误解。
  • 在 a=matrix(c(1,2,3,4),nrow=2,ncol=2) 和 b=c('name',3) 的情况下。我正在尝试合并 a 和 b 使得结果是第一行中的 [1 3 name 3] 和第二行中的 [2 4]。
  • 这就是我的意思:它不能做到,因为这违背了data.frame 。矩阵和data.frame 的相似之处在于它们必须是矩形的,每个单元格中都有something。那个“某物”可能是一个NA,它可能表示“什么都没有”或“可能是任何东西”,但它确实是一个东西。是否存在框架/矩阵允许 [[1,2,'name',3],[3,4]] 作为矩阵/数据框的编程语言?

标签: r


【解决方案1】:

每个数据帧的行数不同。因此 cbind 将很难合并数据,并且默认情况下会循环较短的数据帧,在这种情况下为 b。 我建议将行名添加为一列,然后对其进行绑定。默认情况下,full_join 将为缺少该绑定值的数据帧生成 NA 值。此问题与Add (not merge!) two data frames with unequal rows and columns 部分重复,因此您可以在那里找到更多帮助。

# Load packages
library(tidyverse)
library(magrittr) # To use the inplace assignment operator (%<>%) 

# Create dataframes
a <- data.frame(1:2,3:4)
b <- merge('name', 3)

# Create rowname column for each dataframe
a %<>% tibble::rownames_to_column()
b %<>% tibble::rownames_to_column()

# Use 'full join' to bind dataframes together
c <- dplyr::full_join(a, b, by=rowname) %>%
       # Remove the rowname column
       dplyr::select(-rowname)

# Print c
print(c)
  X1.2 X3.4    x  y
  1    1    3 name  3
  2    2    4 <NA> NA

【讨论】:

    【解决方案2】:

    如果您对列表而不是数据框感到满意,这将起作用。

    a <- matrix(c(1,2,3,4),nrow=2,ncol=2)
    b <- c('name',3)
    c <- list(a[,1],a[,2],b[1],b[2] )
    
    

    如果您需要数据框, 你必须让第一行和第二行的列数相同,方法是用一些东西填充间隙。

    d <- as.data.frame(c)
    d[2,3:4] <- NA
    

    【讨论】:

    • 这将导致第一行中的 [1 3 name 3] 和第二行中的 [2 4 ]。我们可以从第二行中删除 并仅获取它 [2 4 ]。我尝试使用 replace(d,d[2,3:4], " " );但出现错误,因为它仅在包含所有数字变量的数据框上定义。
    • 在R的数据框中,每一列必须有相同长度的元素。因此,不可能创建您想要的内容。为什么需要这种类型的数据?使用数据框时必须进行临时数据操作,将 NA 保留在数据框中。或者以列表格式创建和使用数据。
    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2018-01-29
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多