通过添加新列扩展 data.frame
Expand data.frame by adding new column
这是我的 data.frame(s) 的例子:
df = data.frame(x=c(1871:1872))
df2 = data.frame(y=c(1:3))
如何用 df2
个观察结果扩展 df
?
期望的输出:
x y
1871 1
1871 2
1871 3
1872 1
1872 2
1872 3
我还没有找到任何解决方案。
谢谢
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$x
和 cbind
整个 df2
到 df$x
的每个元素。 do.call
将所有内容合二为一 data.frame。
使用 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
第三种(但不太优雅)解决方案:
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
这是我的 data.frame(s) 的例子:
df = data.frame(x=c(1871:1872))
df2 = data.frame(y=c(1:3))
如何用 df2
个观察结果扩展 df
?
期望的输出:
x y
1871 1
1871 2
1871 3
1872 1
1872 2
1872 3
我还没有找到任何解决方案。 谢谢
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$x
和 cbind
整个 df2
到 df$x
的每个元素。 do.call
将所有内容合二为一 data.frame。
使用 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
第三种(但不太优雅)解决方案:
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