首页 文章

如何在列表中用Na完成缺失值?

提问于
浏览
0

我有一个数据框,其中包含以下列:树ID,月,值 . 几个月来,没有记录数据,因此数据框中不存在这些月份 . 我已经完成了缺少月份的列表,但现在我不知道如何在增加的月份的值列中插入NA .

例:

Tree.Id :1,2,3,4,5,6,7,8,9,10 Month :Jan,Feb,Mar,May,Jun,Jul,Sept,Oct,Nov,Dec Values :1,0,1, 1,0,2,1,1,0,2

缺少以下几个月:4月,8月,我用下面的代码添加了它们,现在我想要在增加的2个月中在值列中引入NA .

这是我尝试过的:

tree_ls <- list()
  for (i in unique(data$Tree.ID)){
mon1 <-  data$month[data$Tree.ID == i]  ###  extract the month for every Tree iD
mon <- min(mon1, na.rm=T):max(mon1, na.rm=T) # completes the numbers with the missing month 
dat1 <- data$value[data$Tree.ID == i]
......

在此步骤之后,我不知道如何创建一个列表,该列表将为缺少的所有已添加月份添加NA,因此我将具有相同长度的列表 .

谢谢

2 回答

  • 1

    这是一个老帖子,但我有一个非常好的解决方案:

    首先,您的小型可重现代码应该如下:

    month <- c(Jan, Feb, Mar, May, Jun, Jul, Sept, Oct, Nov, Dec)
    value <- c(1,0,1,1,0,2,1,1,0,2)
    df <- data.frame(id=id, month=month,value=value)
    > head(df)
      id month value
    1  1   Jan     1
    2  2   Feb     0
    3  3   Mar     1
    4  4   May     1
    5  5   Jun     0
    6  6   Jul     2
    

    现在只需简单介绍一下您所在域名的完整列表,例如您想要获取NA的月份 .

    completeMonths <- c("Jan", "Feb", "Mar", "Apr","May", "Jun", "Jul","Aug", "Sept", "Oct", "Nov", "Dec")
    df2 <- dataframe(month=completeMonths)
    > df2
    month
    1    Jan
    2    Feb
    3    Mar
    4    Apr
    5    May
    6    Jun
    7    Jul
    8    Aug
    9   Sept
    10   Oct
    11   Nov
    12   Dec
    

    现在我们有一个包含所有基础值的列,因此当我们合并时,我们可以使用以下语法将缺少的行填充为NA:

    merge(df, df2, on=month, all=TRUE)
    

    我们的结果如下:

    month id value
    1    Dec 10     2
    2    Feb  2     0
    3    Jan  1     1
    4    Jul  6     2
    5    Jun  5     0
    6    Mar  3     1
    7    May  4     1
    8    Nov  9     0
    9    Oct  8     1
    10  Sept  7     1
    11   Apr NA    NA
    12   Aug NA    NA
    

    希望这会有所帮助,数据争论很糟糕 .

  • 0

    如果你说 data frame 有几个月"no recorded data"因此"do not exist",那么他们在 data frame 中的事实就意味着他们有一些代表性 . 我猜你的意思是"do not exist"你的意思是它们是空字符串,比如 "" . 如果是这种情况,您可以使用 dplyr 包中的 mutate 和基础包中的 ifelse 替换 NA 值的空白字符串,如下所示:

    library(dplyr);
    data_with_nas <- mutate(data, value = ifelse(value=="", NA, value));
    

    其内容为“更改 data data frame ,以便 value 单元格被 NA 替换,如果它们是空白字符串,或保持不变 . ”

相关问题