r - 在 R 中移动一列
问题描述
假设我有一个如下数据框:
library(tidyverse)
df <- tibble(x = c(1,2,3), y = c(4,5,6))
# A tibble: 3 x 2
x y
<dbl> <dbl>
1 1 4
2 2 5
3 3 6
我想移动一列,添加一列,如:
# A tibble: 3 x 3
x y shifted_x
<dbl> <dbl> <dbl>
1 1 4 NA
2 2 5 1
3 3 6 2
基本上,我想使用时间序列,所以我想获取以前的值并将它们用作特征。在python
我知道我可以做到:
for i in range(1,11):
df[f'feature_{i}']=df['sepal_length'].shift(i)
df
数据框在哪里pandas
。在 中执行此操作的任何等效代码R
?
解决方案
中的等价物R
tidyverse
是dplyr::lag
。通过将 ( ) 分配回同一对象“df”来创建列mutate
并更新对象<-
library(dplyr)
df <- df %>%
mutate(shifted_x = lag(x))
或者如果我们需要使用,shift
有shift
data.table
library(data.table)
setDT(df)[, shifted_x := shift(x)]
此外,如果我们需要创建多个列,shift
可以在n
setDT(df)[, paste0('shifted', 1:3) := shift(x, n = 1:3)]
推荐阅读
- python-xarray - xarray:仅用 1 替换正值
- database - 将聊天消息保存到 MERN 堆栈中的数据库的最佳方法是什么?
- html - 绝对定位文本与相对定位文本重叠
- .htaccess - 如何修复 favicon.ico 文件的“缓存控制标头丢失或为空”
- javascript - Babel-如何使“配置合并选项”中的“排除”起作用?
- python - 无法将 sklearn 估计器作为函数参数传递
- python - 为什么某些行不打印
- ios - 使用第一个 MLModel MLMultiArray 输出作为第二个 MLModel MLMultiArray 输入
- android - 注销后如何使用 Retrofit 处理“204 no content”响应?
- c++ - 将unique_ptr / auto_ptr隐式转换为基本类型不起作用?