通过删除一些NA单元来压缩数据帧?

Fat*_*erg 6 loops r lapply dataframe na

如果我有一个数据框如下:

data.frame(
  cola = c(3,NA,NA),
  colb = c(1,NA,NA),
  colc = c(NA,6,NA),
  cold = c(NA,7,NA),
  cole = c(NA,3,NA),
  colf = c(NA,NA,9), 
  colg = c(NA,NA,8)
)
Run Code Online (Sandbox Code Playgroud)

如何将所有字段向左移动,根据需要消除NA值,如下所示:

data.frame(
  cola = c(3,6,9),
  colb = c(1,7,8),
  colc = c(NA,3,NA)
)
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

akr*_*run 5

我们循环遍历行,删除NA元素,na.omit然后NA根据最大长度追加到末尾list

lst <- apply(df1, 1, na.omit)
out <- as.data.frame(do.call(rbind, lapply(lst, `length<-`, max(lengths(lst)))))
Run Code Online (Sandbox Code Playgroud)

  • 怎么样的单行:`data.frame(t(apply(dfa,1,function(x)x [!is.na(x)] [seq_len(max(rowSums(!is.na(dfa))) ))))`? (2认同)