说我有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}}。
答案 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)
结合使用非常高效的transform
和na.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))), ]