我在 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)]