我有两个data.frame,第一个是日期框架,第二个是城市框架,我正在尝试将这两个框架合并为一个。
日期范围:
date
2018/7/7
2018/7/8
2018/7/9城市框架:
area
beijing
shanghai
guangzhou我想要的结果是:
date area
2018/7/7 beijing
2018/7/7 shanghai
2018/7/7 guangzhou
2018/7/8 beijing
2018/7/8 shanghai
2018/7/8 guangzhou
2018/7/9 beijing
2018/7/9 shanghai
2018/7/9 guangzhou 提前感谢!
发布于 2019-11-17 16:20:15
我们可以在base R中使用expand.grid
expand.grid(df1$date, df2$area)或来自tidyr的crossing
tidyr::crossing(df1, df2)
# date area
# <fct> <fct>
#1 2018/7/7 beijing
#2 2018/7/7 guangzhou
#3 2018/7/7 shanghai
#4 2018/7/8 beijing
#5 2018/7/8 guangzhou
#6 2018/7/8 shanghai
#7 2018/7/9 beijing
#8 2018/7/9 guangzhou
#9 2018/7/9 shanghai data
df1 <- structure(list(date = structure(1:3, .Label = c("2018/7/7", "2018/7/8",
"2018/7/9"), class = "factor")), class = "data.frame", row.names = c(NA, -3L))
df2 <- structure(list(area = structure(c(1L, 3L, 2L), .Label = c("beijing",
"guangzhou", "shanghai"), class = "factor")), class = "data.frame",
row.names = c(NA, -3L))发布于 2019-11-17 16:29:42
这也可以给你想要的输出:
data.frame(date = sort(rep(df1$date, length(df2$area))), area= df2$area)
# date area
# 1 2018/7/7 beijing
# 2 2018/7/7 shanghai
# 3 2018/7/7 guangzhou
# 4 2018/7/8 beijing
# 5 2018/7/8 shanghai
# 6 2018/7/8 guangzhou
# 7 2018/7/9 beijing
# 8 2018/7/9 shanghai
# 9 2018/7/9 guangzhou发布于 2019-11-17 18:40:09
在base R中,您可以使用lapply和rbind来创建它
Reduce(rbind,lapply(df1$date, function(v) data.frame(date = v, area = df2["area"])))其中输出如下:
date area
1 2018/7/7 beijing
2 2018/7/7 shanghai
3 2018/7/7 guangzhou
4 2018/7/8 beijing
5 2018/7/8 shanghai
6 2018/7/8 guangzhou
7 2018/7/9 beijing
8 2018/7/9 shanghai
9 2018/7/9 guangzhouhttps://stackoverflow.com/questions/58898693
复制相似问题