如何在数据帧的列上使用 R 的 diff 函数,条件是在不同的列中具有特定值

  • 本文关键字:条件 函数 数据帧 diff r dataframe diff
  • 更新时间 :
  • 英文 :


我正在使用的数据集具有不同类型公共交通工具的平均乘客量和不同年份。我有兴趣创建一个新列,显示每种公共交通工具的平均乘客量比前一年增加的情况。 我尝试使用的代码如下:

for (i in 1:length(public_trans$type_of_public_transport)) {
if (public_trans$type_of_public_transport[i] == public_trans$type_of_public_transport[i+1]) {
ridership_diff[i] <- ifelse(public_trans$average_ridership == 0, 0, public_trans$average_ridership[i+1] - public_trans$average_ridership[i])
next}}

我运行代码的输出是这样的: "if (public_trans$type_of_public_transport[i] == public_trans$type_of_public_transport[i + : 需要真/假的地方缺少值 另外:有 50 个或更多警告(使用 warnings(( 查看前 50 个(">

通过将循环的开始从"1:length(public_trans$type_of_public_transport(("更改为"0:length(public_trans$type_of_public_transport((",输出错误变为: "if (public_trans$type_of_public_transport[i] == public_trans$type_of_public_transport[i + : 参数长度为零">

此外,即使我的代码有效,我也非常确定有一种更简单、更直接的方法来获得我想要的结果。

当循环到达最后一行并且i + 1没有条目时,就会出现问题。OP 还提到从 0 开始索引,但R索引从 1 开始。 一个选项是循环到最后一行

for (i in 1:(length(public_trans$type_of_public_transport) - 1)) {
if (public_trans$type_of_public_transport[i] == 
public_trans$type_of_public_transport[i+1]) {
ridership_diff[i] <- ifelse(public_trans$average_ridership[i] == 0, 0, 
public_trans$average_ridership[i+1] - public_trans$average_ridership[i])
}}

ifelse是矢量化的,所以我们在这里不需要循环

ridership_diff <- with(public_trans,  ifelse(type_of_public_transport[-1] == type_of_public_transport[-nrow(public_trans)] & average_ridership[-nrow(publlic_trans)] == 0,
0, average_ridership[-1] -average_ridership[-nrow(public_trans)])) 

最新更新