首页 > 解决方案 > 如何删除 R 中的 na 并使低于值上升

问题描述

我有一个如下数据框:

如何删除 na 并使用以下值上涨?

谢谢

  id name.america name.europe name.asia
   1            a        <NA>      <NA>
   2         <NA>           b      <NA>
   3         <NA>        <NA>         c
   4            d        <NA>      <NA>

改成:

  id name.america name.europe name.asia
   1            a           b         c 
   2            d           

标签: rreshape

解决方案


我们可以遍历列并删除NA,然后在获取元素的长度后通过在末尾附加lengths来使元素的 相同。基于此,对数据集的“id”列进行子集化并附加输出listNAmaxlist

lst <- lapply(df1[-1], na.omit)
lst1 <- lapply(lst, `length<-`, max(lengths(lst)))
out <- data.frame(lst1)
out1 <- cbind(id = df1$id[seq_len(nrow(out))], out)
out1
#  id name.america name.europe name.asia
#1  1            a           b         c
#2  2            d        <NA>      <NA>

如果我们需要NA改为空格("") - 不推荐

out1[is.na(out1)] <- ""

数据

df1 <- structure(list(id = 1:4, name.america = c("a", NA, NA, "d"), 
name.europe = c(NA, "b", NA, NA), name.asia = c(NA, NA, "c", 
NA)), class = "data.frame", row.names = c(NA, -4L))

推荐阅读