【问题标题】:Is it possible to shift column values up by one in R data frame? [duplicate]是否可以在 R 数据框中将列值上移一位? [复制]
【发布时间】:2021-06-30 23:41:52
【问题描述】:

假设我们有一个这样的数据框:

Value  Image
24.34  pic_00001
232.4  pic_00002
342.34 pic_00003

Image 列以相同的顺序继续,直到完整数据集中的pic_10000

我想替换 Image 列值,使其从 pic_00002 开始 - 实质上是删除 pic_00001 并将它们全部向上移动。 Values 列应该保持不变。换句话说,输出应该是这样的:

Value  Image
24.34  pic_00002
232.4  pic_00003
342.34 pic_00004

高达pic_10001(如果方法是将所有列值上移1,则需要生成)

有人知道怎么做吗?

【问题讨论】:

  • 以下是否适合您:df$Shifted <- c(df$Image[-1], NA)
  • 如果您需要它从 2 开始,然后将(从您的 previous question's accepted answersprintf("pic_%05d", seq_len(NROW(dat))) 更改为 sprintf("pic_%05d", seq_len(NROW(dat))+1L)
  • Tidyverse 的 lead() 似乎也很有用。
  • 这是否回答了您的问题:"shift values in single column of dataframe up"?需要明确的是,this 可能是最干净的答案:library(dplyr) 然后是 your_df %>% mutate(Image = lead(Image, n = 1, default = NA));我明确指定n = 1 来说明移位1,并指定default = NA 来显示用于填充列底部“存根”的值。
  • @Limey 我其实是想改成lead() 而不是lag(),但我来不及编辑,只好删掉重新输入。 ://

标签: r dataframe


【解决方案1】:

我会使用来自 dplyr 的lead()

library(dplyr)

x <- tribble(
  ~value,   ~image,
  1,        "zero",
  2,        "one",
  3,        "two",
)

x %>% 
  mutate(lead_image = lead(image, 1, default = "manual three"))
#> # A tibble: 3 x 3
#>   value image lead_image  
#>   <dbl> <chr> <chr>       
#> 1     1 zero  one         
#> 2     2 one   two         
#> 3     3 two   manual three

reprex package (v2.0.0) 于 2021 年 6 月 30 日创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2021-01-30
    • 2013-12-19
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多