例如,如果我有一个按3个类别分组的数据框:
x = data.frame(
location = c(1,2,2,2,2,2,3,3,3,3),
type=c('a','b','b','b','b','b','c','c','c','c'),
time=c(1,1,2,3,4,5,1,2,3,4),value=c(12,56,57,58,24,35,57,86,46,35)
)
location type time value
1 1 a 1 12
2 2 b 1 56
3 2 b 2 57
4 2 b 3 58
5 2 b 4 24
6 2 b 5 35
7 3 c 1 57
8 3 c 2 86
9 3 c 3 46
10 3 c 4 35
我希望输出包含每个时间间隔的每个类型的每个位置。 (这三个分组将被填写,但值将为空)
有什么想法吗?熊猫似乎有堆叠和堆叠,但我不确定这是如何在R中模仿。
编辑:这里所需的输出应该是这样的
location type time value
1 1 a 1 12
2 1 a 2 0
3 1 a 3 0
4 1 a 4 0
5 1 a 5 0
6 1 b 1 0
7 1 b 2 0
8 1 b 3 0
9 1 b 4 0
10 1 b 5 0
.....等等
答案 0 :(得分:3)
您可以使用expand.grid()
并添加@markus和@ Frank的建议:
y <- expand.grid(sapply(x[, 1:3], unique))
xy <- merge(y, x, all=TRUE)
str(xy)
# 'data.frame': 45 obs. of 4 variables:
# $ location: num 1 1 1 1 1 1 1 1 1 1 ...
# $ type : Factor w/ 3 levels "a","b","c": 1 1 1 1 1 2 2 2 2 2 ...
# $ time : num 1 2 3 4 5 1 2 3 4 5 ...
# $ value : num 12 NA NA NA NA NA NA NA NA NA ...
head(xy)
# location type time value
# 1 1 a 1 12
# 2 1 a 2 NA
# 3 1 a 3 NA
# 4 1 a 4 NA
# 5 1 a 5 NA
# 6 1 b 1 NA