首页 > 解决方案 > 在 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

标签: rtidyverse

解决方案


中的等价物R tidyversedplyr::lag。通过将 ( ) 分配回同一对象“df”来创建列mutate并更新对象<-

library(dplyr)
df <- df %>%
    mutate(shifted_x = lag(x))

或者如果我们需要使用,shiftshiftdata.table

library(data.table)
setDT(df)[, shifted_x := shift(x)]

此外,如果我们需要创建多个列,shift可以在n

setDT(df)[, paste0('shifted', 1:3) := shift(x, n = 1:3)]

推荐阅读