r - 对数据帧的相等值/行求和/计数
问题描述
我有一个数据框,其中包含一堆单独的旅行数据,每次旅行都有一个起点和终点站 ID。
我正在尝试制作第二个数据框,其中包含为每个站点重新排列的所有信息。因此,例如,如果在第一个数据帧中有 50 个行程的 start_station_id == 12,那么在 station_id 12 下的第二个数据帧的“开始”列将等于 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 循环?任何提示都会非常有帮助
解决方案
该方法是可行的,但您不应该使用 data.frame 来放入您的新数据,因为您还不知道行数。只需使用一个列表并将其转换为最后的 data.frame :
stationData = list("station" = unique(c(data$start_station_id, data$end_station_id)), ## Create a list of all stations
"starts" = c(),
for(i in i:length(stationData$station)){
s = stationData$station[i]
stationData$starts[i] <- sum(data$start_station_id == s)
}
stationData = as.data.frame(stationData)
在 for 循环结束时,两列的长度将相同,创建此数据不会有问题。
但是,更简单的方法是使用该table()
函数,该函数自动计算起始站的数量,并且已经由 Abdessabour Mtk 提出。
推荐阅读
- sql - 将两个不同的结果集组合到一个查询中
- c# - httpService.post 期望 2 到 3 个参数但得到 4,如何将请求对象与 `FormData` fd 一起传递
- python - 如何配置 django 独立应用程序以自动安装所有子应用程序?
- vue.js - 如何在 vue 中创建嵌套路由?指向网址但页面未加载
- odata - 有没有办法在客户端操作模式中发送过滤器/参数?
- c# - c#串口数据无效
- oracle - 在没有 :OLD 和触发器的情况下访问旧值
- python-3.x - 错误:找不到 matomo-api 的匹配分布
- java - 在while循环中存储多个值 - Java
- android - 在 Android N 及更高版本的分屏中打开已安装的应用程序