通过添加新列来展开data.frame

时间:2017-12-10 12:57:14

标签: r dataframe expand

这是我的data.frame(s)的一个例子:

df = data.frame(x=c(1871:1872))
df2 = data.frame(y=c(1:3))

如何使用df观察结果展开df2

期望的输出:

x     y
1871  1
1871  2
1871  3
1872  1
1872  2
1872  3

我还没找到任何解决方案。 感谢

3 个答案:

答案 0 :(得分:5)

使用expand.grid的解决方案,为您提供两个变量的所有组合。

df = data.frame(x=c(1871:1872))
df2 = data.frame(y=c(1:3))

expand.grid(x = df$x, y = df2$y)

#      x y
# 1 1871 1
# 2 1872 1
# 3 1871 2
# 4 1872 2
# 5 1871 3
# 6 1872 3

答案 1 :(得分:4)

lapply的一种方式:

do.call(rbind, lapply(df$x, function(z) {
  cbind(z, df2)
}))
#     z y
#1 1871 1
#2 1871 2
#3 1871 3
#4 1872 1
#5 1872 2
#6 1872 3

lapply遍历df$xcbind整个df2df$x的每个元素。 do.call将所有内容组合在一个data.frame中。

答案 2 :(得分:2)

第三种(但不那么优雅)的解决方案:

data.frame(x=rep(df$x, each=nrow(df2)), 
           y=rep(df2$y,length(unique(df$x)))
)

#      x y
# 1 1871 1
# 2 1871 2
# 3 1871 3
# 4 1872 1
# 5 1872 2
# 6 1872 3