在 R 中同时对多行数据帧进行操作
Operate on multiple rows of dataframe simultaneously in R
我确定以前有人问过这个(非常基本的)问题,但我一定是在搜索错误的东西,因为我找不到答案:
我经常需要执行涉及合并来自同一数据帧的多行数据的操作。我知道如何使用循环结构来做到这一点,例如
for (i in 2:nrow(df)) { df$result[i] <- df$data[i] - df$data[i-1] }
for (i in 12:nrow(df)) { j <- i - 11; df$result[i] <- prod(df$data[j:i]) }
对于这些类型的操作,是否有不涉及循环的通用解决方案?或者循环实际上是在 R 中执行此操作的最佳方法?
您可以尝试对数据框进行子集化,例如这个:
for (i in 2:nrow[df]) { df$result[i] <- df$data[i] - df$data[i-1] }
变为:
df$result[2:nrow(df)] <- df$data[2:nrow(df)] - df$data[1:nrow(df)-1]
注意:nrow()
是一个函数 AFAIK,因此您应该使用圆括号而不是方括号来调用它。
在基础 R 中:
df$result[2:nrow(df)] = diff(df$data)
df$result2[13:nrow(df)] = diff(df$data,12)
或dplyr
:
df$result = dplyr::lag(df$data)
df$result2 = dplyr::lag(df$data, 12)
我确定以前有人问过这个(非常基本的)问题,但我一定是在搜索错误的东西,因为我找不到答案:
我经常需要执行涉及合并来自同一数据帧的多行数据的操作。我知道如何使用循环结构来做到这一点,例如
for (i in 2:nrow(df)) { df$result[i] <- df$data[i] - df$data[i-1] }
for (i in 12:nrow(df)) { j <- i - 11; df$result[i] <- prod(df$data[j:i]) }
对于这些类型的操作,是否有不涉及循环的通用解决方案?或者循环实际上是在 R 中执行此操作的最佳方法?
您可以尝试对数据框进行子集化,例如这个:
for (i in 2:nrow[df]) { df$result[i] <- df$data[i] - df$data[i-1] }
变为:
df$result[2:nrow(df)] <- df$data[2:nrow(df)] - df$data[1:nrow(df)-1]
注意:nrow()
是一个函数 AFAIK,因此您应该使用圆括号而不是方括号来调用它。
在基础 R 中:
df$result[2:nrow(df)] = diff(df$data)
df$result2[13:nrow(df)] = diff(df$data,12)
或dplyr
:
df$result = dplyr::lag(df$data)
df$result2 = dplyr::lag(df$data, 12)