【发布时间】:2020-08-18 01:01:28
【问题描述】:
我有一个数据框,其中包含一堆单独的行程数据,每次行程都有一个起点和终点站 ID。
我正在尝试制作第二个数据框,其中包含为每个站点重新排列的所有信息。例如,如果在第一个数据帧中有 50 次行程的 start_station_id == 12,那么在 station_id 12 下的第二个数据帧的“starts”列将等于 50
目前我认为for 循环将是解决此问题的最佳方法,但我似乎无法破解它
for(i in range(station_ids)){
stationData$starts[i] <- sum(data$start_station_id[i] == station_ids[i])
}
这会产生以下错误:
Error in `$<-.data.frame`(`*tmp*`, starts, value = c(0, 0, 0, 0, 0, 0, :
replacement has 370 rows, data has 369
station_id's 是一个包含每个唯一站 id # 的变量,stationData$starts 是我想要存储启动次数的位置。数据是我试图运行 for 循环的原始数据。
有没有更简单的方法来完成这个操作,还是我只是写错了 for 循环?任何提示都会非常有帮助
【问题讨论】:
-
请使用
dput添加数据并显示相同的预期输出。请阅读有关how to ask a good question 以及如何提供reproducible example 的信息。 -
在没有数据样本的情况下很难提供帮助,但是像
ddply(data, .(station_id), summarise, <summary functions>)这样的东西可以在没有循环的情况下做你想做的事情 -
你不应该使用
data$start_station_id == station_ids[i],而且使用table函数会更快=>table(data$start_station_id)