R 将数据帧合并/堆叠在一起,并将相应的表名合并到第一列的变量中
我有多个数据帧遵循以下格式:R 将数据帧合并/堆叠在一起,并将相应的表名合并到第一列的变量中,r,R,我有多个数据帧遵循以下格式: customers_outdoor id rating 12 1 21 2 45 3 customers_sports id rating 23 1 34 2 我希望以rbind方式将它们合并到一个数据帧中,并要求id变量成为id列与表名的串联。理想情况下,它应该如下所示: customers_all id rating customers_outdoor.12 1 customers_outdoor.21 2 customers_outdoor.45
customers_outdoor
id rating
12 1
21 2
45 3
customers_sports
id rating
23 1
34 2
我希望以rbind方式将它们合并到一个数据帧中,并要求id变量成为id列与表名的串联。理想情况下,它应该如下所示:
customers_all
id rating
customers_outdoor.12 1
customers_outdoor.21 2
customers_outdoor.45 3
customers_sports.23 1
customers_sports.34 2
正在寻找一种不需要太多循环的简单方法。谢谢 这实际上不是所谓的合并(即合并列)。您正在将行绑定在一起,这有时称为堆叠 首先向每个数据帧添加一列,以标识源:
customers_outdoor$df_name <- "customers_outdoor"
customers_sports$df_name <- "customers_sports"
customers\u outdoor$df\u name这实际上不是所谓的合并(即合并列)。您正在将行绑定在一起,这有时称为堆叠
首先向每个数据帧添加一列,以标识源:
customers_outdoor$df_name <- "customers_outdoor"
customers_sports$df_name <- "customers_sports"
customers\u outdoor$df\u name这里是另一种方法,尽管我更喜欢user3114046:
## customers_outdoor <- read.table(text="
## id rating
## 12 1
## 21 2
## 45 3", header=TRUE)
##
## customers_sports <- read.table(text="
## id rating
## 23 1
## 34 2", header=TRUE)
L1 <- setNames(list(customers_outdoor, customers_sports),
c("customers_outdoor", "customers_sports"))
dat <- data.frame(x=rep(names(L1), sapply(L1, nrow)),
do.call(rbind.data.frame, L1), row.names=NULL)
data.frame(id=paste(dat[, 1], dat[, 2], sep="."), dat[, 3, drop=FALSE])
## id rating
## 1 customers_outdoor.12 1
## 2 customers_outdoor.21 2
## 3 customers_outdoor.45 3
## 4 customers_sports.23 1
## 5 customers_sports.34 2
##客户_户外这里有另一种方法,尽管我更喜欢user3114046:
## customers_outdoor <- read.table(text="
## id rating
## 12 1
## 21 2
## 45 3", header=TRUE)
##
## customers_sports <- read.table(text="
## id rating
## 23 1
## 34 2", header=TRUE)
L1 <- setNames(list(customers_outdoor, customers_sports),
c("customers_outdoor", "customers_sports"))
dat <- data.frame(x=rep(names(L1), sapply(L1, nrow)),
do.call(rbind.data.frame, L1), row.names=NULL)
data.frame(id=paste(dat[, 1], dat[, 2], sep="."), dat[, 3, drop=FALSE])
## id rating
## 1 customers_outdoor.12 1
## 2 customers_outdoor.21 2
## 3 customers_outdoor.45 3
## 4 customers_sports.23 1
## 5 customers_sports.34 2
###客户#感谢您提供的清洁解决方案。我将编辑此问题,以包括“堆叠”,以防其他人寻求类似的解决方案。感谢您提供干净的解决方案。我将对问题进行编辑,以包括“堆叠”,以防其他人寻求类似的解决方案。