在R中按行号合并

时间:2015-09-22 20:57:27

标签: r merge grep

我正在尝试合并两个数据框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.

有关如何解决此问题的任何想法?提前致谢。

2 个答案:

答案 0 :(得分:4)

假设您有一个名为data.frame的{​​{1}}对象,定义如下:

dat1

假设您有一个向量> 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

答案 1 :(得分:0)

谢谢,快速响应,尤其是@aashanand,以获得优雅的解决方案。这是快速的方法:

dat3 <- dat1[dat2$rownumbers, ]