Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将数据帧合并/堆叠在一起,并将相应的表名合并到第一列的变量中_R - Fatal编程技术网

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

###客户#感谢您提供的清洁解决方案。我将编辑此问题,以包括“堆叠”,以防其他人寻求类似的解决方案。感谢您提供干净的解决方案。我将对问题进行编辑,以包括“堆叠”,以防其他人寻求类似的解决方案。