【发布时间】:2015-09-22 20:57:27
【问题描述】:
我正在尝试合并两个数据框,dat1 和 dat2。
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.names 和 rownumber 不匹配。例如,在dat3 的第一行,row.names = 1,但rownumber = 777。
关于如何解决这个问题的任何想法?提前致谢。
【问题讨论】:
-
能否请您出示想要的结果
-
当然,@RichardScriven:我希望
dat3是一个 n x 65 数据框,其中第一行对应于dat1第 12 行,第 2 行对应于dat1第 45 行,第 3 行对应dat1第 56 行等 -
您引用了
row.names和rownames,但您的dat1既没有包含这些名称的列,也没有定义row.names属性。我建议明确向dat1添加一列。此外,使用merge,如果要匹配的列名不同,您需要指定,例如by.x = "rownames", by.y = "rownmber"。 -
在您的示例中,您的 dat2 是 4 x 1 df 而 dat1 是 5 x 5 df;大概你在 dat2 中漏掉了一个数字。我对你的问题的理解是你只是想要 dat1 的行排列?如果是这样,下面的 aashanand 的回答应该可以完成这项工作