【发布时间】: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 answer)
sprintf("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(),但我来不及编辑,只好删掉重新输入。 ://