相关疑难解决方法(0)

合并(rbind)数据帧并使用原始数据帧的名称创建列

我有几个数据框,我想按行组合.在生成的单个数据框中,我想创建一个新变量,用于标识观察来自哪个数据集.

# original data frames
df1 <- data.frame(x = c(1, 3), y = c(2, 4))
df2 <- data.frame(x = c(5, 7), y = c(6, 8))

# desired, combined data frame
df3  <- data.frame(x = c(1, 3, 5, 7), y = c(2, 4, 6, 8),
                   source = c("df1", "df1", "df2", "df2")
# x y source
# 1 2    df1
# 3 4    df1
# 5 6    df2
# 7 8    df2
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?提前致谢!

r

24
推荐指数
4
解决办法
1万
查看次数

在lapply/ldply中使用列表中的对象名称

在试图回答一个问题之前,我遇到了一个似乎应该很简单的问题,但我无法弄明白.

如果我有一个数据帧列表:

df1 <- data.frame(a=1:3, x=rnorm(3))
df2 <- data.frame(a=1:3, x=rnorm(3))
df3 <- data.frame(a=1:3, x=rnorm(3))

df.list <- list(df1, df2, df3)
Run Code Online (Sandbox Code Playgroud)

我想要rbind在一起,我可以做到以下几点:

df.all <- ldply(df.list, rbind)
Run Code Online (Sandbox Code Playgroud)

但是,我想要另一个列来标识data.frame每行来自哪一行.我希望能够使用该deparse(substitute(x))方法(此处和其他地方)获取相关的名称data.frame并添加一列.这就是我接近它的方式:

fun <- function(x) {
  name <- deparse(substitute(x))
  x$id <- name
  return(x)
}
df.all <- ldply(df.list, fun)
Run Code Online (Sandbox Code Playgroud)

哪个回报

  a          x      id
1 1  1.1138062 X[[1L]]
2 2 -0.5742069 X[[1L]]
3 3  0.7546323 X[[1L]]
4 1  1.8358605 X[[2L]]
5 2  0.9107199 X[[2L]]
6 3  0.8313439 …
Run Code Online (Sandbox Code Playgroud)

r plyr

7
推荐指数
1
解决办法
5329
查看次数

标签 统计

r ×2

plyr ×1