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

时间:2016-01-04 17:22:12

标签: r na

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

示例:

Tree.Id :1,2,3,4,5,6,7,8,9,10 :1月,2月,3月,5月,6月,7月,9月,10月,11月,12月 :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 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

如果您说data frame有几个月没有记录数据&#34;因此&#34;不存在&#34;,他们在data frame中的事实在某种程度上意味着他们有一些代表性。我猜不到,#34;不存在&#34;你的意思是它们是空字符串,例如""。如果是这种情况,您可以使用NA包中的mutate和基本包中的dplyrifelse值替换为空白字符串,如下所示:< / p>

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

其内容为&#34;更改data data frame,使其value单元格替换为NA(如果它们是空字符串),或保持不变否则&#34;