我的数据框包含以下列:树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,因此我将具有相同长度的列表。
谢谢
答案 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
和基本包中的dplyr
将ifelse
值替换为空白字符串,如下所示:< / p>
library(dplyr);
data_with_nas <- mutate(data, value = ifelse(value=="", NA, value));
其内容为&#34;更改data
data frame
,使其value
单元格替换为NA
(如果它们是空字符串),或保持不变否则&#34;