这可能已经在其他地方解决了,但我找不到任何具体的链接,所以我很高兴看到一个重复的"标签...
我的数据框的行如下所示:
x y z lon lat count
1 A B C 0 0 3
2 B D Q 1 2 2
现在,用ggmap
绘制数据(我是新的并且仍然在学习图形语法),特别是使用stat_bin2d
我认为我应该转换上面的数据通过以下方式:
x y z lon lat
1 A B C 0 0
2 A B C 0 0
3 A B C 0 0
4 B D Q 1 2
5 B D Q 1 2
问题:
1)我的假设是否正确?
2)我如何实现目标?
我已经尝试了几种使用rbind
而没有for
循环的方法,但我没有解决我的问题...我能想到的唯一方法
my_df <- structure(list(x = structure(1:2, .Label = c("A", "B"), class = "factor"),
y = structure(1:2, .Label = c("B", "D"), class = "factor"),
z = structure(1:2, .Label = c("C", "Q"), class = "factor"),
lon = c(0, 1), lat = c(0, 2), count = c(3, 2)),
.Names = c("x", "y", "z", "lon", "lat", "count"),
row.names = 1:2, class = "data.frame")
for (i in 1:nrow(my_df)){
for (j in 1:(my_df$count[i]-1)){
my_df <- rbind(my_df, my_df[i,])}}
row.names(my_df) <- 1:nrow(my_df)
my_df <- my_df[,1:5]
结果是:
x y z lon lat
1 A B C 0 0
2 B D Q 1 2
3 A B C 0 0
4 A B C 0 0
5 B D Q 1 2
它有效,但我想学习更好的方法来实现我的目标。
答案 0 :(得分:2)
答案 1 :(得分:1)
我们可以使用来自expandRows
的方便功能splitstackshape
来按照“计数”来复制行。列。
library(splitstackshape)
res <- expandRows(my_df, 'count')
row.names(res) <- NULL
res
# x y z lon lat
#1 A B C 0 0
#2 A B C 0 0
#3 A B C 0 0
#4 B D Q 1 2
#5 B D Q 1 2