【问题标题】:Merge by row number in R在R中按行号合并
【发布时间】:2015-09-22 20:57:27
【问题描述】:

我正在尝试合并两个数据框,dat1dat2

dat1 是一个 n x 65 的数据框,其rownames 对应于dat2 中的特定值。这是一个较小的玩具示例:

 year <- c(1998, 2001, 2002, 2004, 2008)
 make <- c("Ford", "Dodge", "Toyota", "Tesla", "Jeep") 
 model <- c("Escape", "Ram", "Camry", "Model S", "Wrangler")
 price <- c(4750.00, 14567.00, 20000.00, 60123.00, 18469.00) 
 dat1 <- data.frame(year, make, model, price)

dat2 是一个 nx1 向量,具有一个名为 rownumber 的单列。它包含来自dat1 的感兴趣的行号。这是一个例子:

dat2 <- as.data.frame(c(12, 45, 56, 123))
colnames(dat1)[1] <- "rownumber" 

我尝试如下合并两个数据框:

dat3 <- merge(dat1, dat2, by = "row.names", all.x = TRUE, all.y = FALSE)

问题是dat3 包含两列,row.namesrownumber 不匹配。例如,在dat3 的第一行,row.names = 1,但rownumber = 777。

关于如何解决这个问题的任何想法?提前致谢。

【问题讨论】:

  • 能否请您出示想要的结果
  • 当然,@RichardScriven:我希望 dat3 是一个 n x 65 数据框,其中第一行对应于 dat1 第 12 行,第 2 行对应于 dat1 第 45 行,第 3 行对应dat1 第 56 行等
  • 您引用了row.namesrownames,但您的dat1 既没有包含这些名称的列,也没有定义row.names 属性。我建议明确向dat1 添加一列。此外,使用merge,如果要匹配的列名不同,您需要指定,例如by.x = "rownames", by.y = "rownmber"
  • 在您的示例中,您的 dat2 是 4 x 1 df 而 dat1 是 5 x 5 df;大概你在 dat2 中漏掉了一个数字。我对你的问题的理解是你只是想要 dat1 的行排列?如果是这样,下面的 aashanand 的回答应该可以完成这项工作

标签: r merge


【解决方案1】:

假设您有一个名为dat1data.frame 对象,定义如下:

> year <- c(1998, 2001, 2002, 2004, 2008)
> make <- c("Ford", "Dodge", "Toyota", "Tesla", "Jeep") 
> model <- c("Escape", "Ram", "Camry", "Model S", "Wrangler")
> price <- c(4750.00, 14567.00, 20000.00, 60123.00, 18469.00) 
> dat1 <- data.frame(year, make, model, price)

假设您有一个向量 rownumbers,它定义了来自 dat1 的感兴趣的行。

> rownumbers <- c(2,5)

您的问题并未说明所需的结果,但假设您想对 dat1 的行进行子集化,使其行号位于向量 rownumbers 中,一种简单的方法是:

> dat1[rownumbers,] # Don't forget the comma
  year  make    model price
2 2001 Dodge      Ram 14567
5 2008  Jeep Wrangler 18469

编辑:如果您愿意,可以将子集分配给新变量 dat3

> dat3 <- dat1[rownumbers,]

【讨论】:

    【解决方案2】:

    感谢大家的快速回复,尤其是@aashanand 的优雅解决方案。这是快速的方法:

    dat3 <- dat1[dat2$rownumbers, ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多