如何在不删除 R 中的行的情况下将列向下移动一列

  • 本文关键字:移动 一列 情况下 删除 r
  • 更新时间 :
  • 英文 :


我在 1 列中有数据,它偏离了 1(数据需要向下移动 1(,但所有其他列都是正确的。目前,我正在使用以下命令将列向下移动一列:

df <- na.omit(transform(df, region = c(NA, region[-nrow(df)])))

然而,这似乎从我的数据集中删除了整个顶行(当我在这行代码后的第一行中搜索基因时,我在数据中找不到它( - 这是这行代码中发生的事情吗,有没有办法指定在向下移动时不删除顶行,而是将 NA 或 0 放在列中 新的顶部单元格第一行数据?

例如,我的数据如下所示(区域列数据错误,需要下移 1(:

Gene     Distance   Region
ACE          1       region1
BRCA         2       region2
NOTCH3       3       region2
EGFR         4       region2
P53          5       region3

我希望我的数据输出是这样的:

Gene     Distance   Region
ACE          1       region1
BRCA         2       region1
NOTCH3       3       region2
EGFR         4       region2
P53          5       region2

我使用上述代码的输出目前如下所示:

Gene     Distance   Region
BRCA         2       region1
NOTCH3       3       region2
EGFR         4       region2
P53          5       region2

如果可能的话,ACE 区域是否只是 NA 或 0 对我来说并不重要,但我不确定如何指定它。

如果要将Region列移动 1 行,在基 R 中您可以

df$Region[2:nrow(df)] <- df$Region[1:(nrow(df) - 1)]
df
#    Gene Distance  Region
#1    ACE        1 region1
#2   BRCA        2 region1
#3 NOTCH3        3 region2
#4   EGFR        4 region2
#5    P53        5 region2

数据

df <- structure(list(Gene = structure(c(1L, 2L, 4L, 3L, 5L), .Label = c("ACE", 
"BRCA", "EGFR", "NOTCH3", "P53"), class = "factor"), Distance = 1:5, 
Region = structure(c(1L, 2L, 2L, 2L, 3L), .Label = c("region1", 
"region2", "region3"), class = "factor")), class = "data.frame", 
row.names = c(NA, -5L))

您可以使用dplyr中的lag()函数并适当地设置其定义值:

library(dplyr)
df %>% 
mutate(Region = lag(Region, 
# if missing, as in first row, defaults to the first 
# value of df$region.
default = first(Region)))

使用data.table中的shift()

df$Region <- data.table::shift(df$Region, fill = df$Region[1])
Gene Distance  Region
1    ACE        1 region1
2   BRCA        2 region1
3 NOTCH3        3 region2
4   EGFR        4 region2
5    P53        5 region2

取消选择第一个带[-1]和最后一个带[-nrow(df)]的要按 1 移动。

df$Region[-1]  <- df$Region[-nrow(df)]

相关内容

  • 没有找到相关文章

最新更新