将一列向下移动一列

时间:2014-09-05 14:03:15

标签: r dataframe

说我有data.frame看起来像这样

 df <- data.frame(AAA = rep(c(NA,sample(1:10, 1)),5),
  BBB = rep(c(NA,sample(1:10, 1)),5),
  CCC = rep(c(sample(1:10, 1),NA),5))

> df 
   AAA BBB CCC
1   NA  NA  10
2    3   7  NA
3   NA  NA  10
4    3   7  NA
5   NA  NA  10
6    3   7  NA
7   NA  NA  10
8    3   7  NA
9   NA  NA  10
10   3   7  NA

我想将列CCC向下移动一个,以便所有数字在一行中对齐,然后删除不包含数据的行(通常每隔一行 - 但不总是 - 模式可能会因{{{ 1}}。

3 个答案:

答案 0 :(得分:15)

使用dplyr

library(dplyr)
df %>%
mutate(CCC=lag(CCC)) %>%
na.omit()

或使用data.table

library(data.table)
na.omit(setDT(df)[, CCC:=c(NA, CCC[-.N])])

答案 1 :(得分:6)

结合使用非常高效的transformna.omit函数

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

答案 2 :(得分:3)

您可以将所有内容向下移动:

df['CCC'] <- c(NA, head(df['CCC'], dim(df)[1] - 1)[[1]])

要删除仅包含NA值的行,请执行以下操作:

df <- df[apply(df, 1, function(x) !all(is.na(x))), ]