我正在尝试合并两个数据框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.
有关如何解决此问题的任何想法?提前致谢。
答案 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, ]