在data.frame中按顺序和NAs填充数字
下面是我的示例data.frame:在data.frame中按顺序和NAs填充数字,r,dataframe,rows,fill,na,R,Dataframe,Rows,Fill,Na,下面是我的示例data.frame: df = read.table(text = 'colA colB colC colD 74001 9520 2 56 74006 9520 2 56 33021 9518 3 99 33024 9518 3 99 37001 9518 3 99 33014 9517 19 143 33023 9517 19 143 33050 9517 19 143
df = read.table(text = 'colA colB colC colD
74001 9520 2 56
74006 9520 2 56
33021 9518 3 99
33024 9518 3 99
37001 9518 3 99
33014 9517 19 143
33023 9517 19 143
33050 9517 19 143
34005 9517 19 143
34006 9517 19 143
37006 9517 19 143
38001 9517 19 143
38020 9517 19 143
38021 9517 19 143
39005 9517 19 143
39093 9517 19 143
40004 9517 19 143
40012 9517 19 143
41005 9517 19 143
41006 9517 19 143
41012 9517 19 143
41014 9517 19 143
41020 9517 19 143
41022 9517 19 143
38022 9516 5 177
39003 9516 5 177
39056 9516 5 177
40016 9516 5 177
47011 9516 5 177
46006 9514 16 176
47007 9514 16 176
47009 9514 16 176
47011 9514 16 176
58008 9514 16 176
59001 9514 16 176
59002 9514 16 176
60004 9514 16 176
60006 9514 16 176
61001 9514 16 176
61002 9514 16 176
61003 9514 16 176
65005 9514 16 176
81002 9514 16 176
81003 9514 16 176
82003 9514 16 176
41006 9512 1 163
65005 9510 1 164
40003 9509 9 165
40011 9509 9 165
40012 9509 9 165
47004 9509 9 165
47009 9509 9 165
48010 9509 9 165
60004 9509 9 165
62001 9509 9 165
66006 9509 9 165', header = TRUE)
我只需要在剩下的列中用缺少的colB
观察值(每个缺少一个)和NAs来填充df
在这种情况下,mycolB
colB的范围从colB
=9509到colB
=9520,此范围内缺少的观测值为colB
=9519、9515、9513和9511
以下是我的预期输出:
colA colB colC colD
74001 9520 2 56
74006 9520 2 56
NA 9519 NA NA
33021 9518 3 99
33024 9518 3 99
37001 9518 3 99
33014 9517 19 143
33023 9517 19 143
33050 9517 19 143
34005 9517 19 143
34006 9517 19 143
37006 9517 19 143
38001 9517 19 143
38020 9517 19 143
38021 9517 19 143
39005 9517 19 143
39093 9517 19 143
40004 9517 19 143
40012 9517 19 143
41005 9517 19 143
41006 9517 19 143
41012 9517 19 143
41014 9517 19 143
41020 9517 19 143
41022 9517 19 143
38022 9516 5 177
39003 9516 5 177
39056 9516 5 177
40016 9516 5 177
47011 9516 5 177
NA 9515 NA NA
46006 9514 16 176
47007 9514 16 176
47009 9514 16 176
47011 9514 16 176
58008 9514 16 176
59001 9514 16 176
59002 9514 16 176
60004 9514 16 176
60006 9514 16 176
61001 9514 16 176
61002 9514 16 176
61003 9514 16 176
65005 9514 16 176
81002 9514 16 176
81003 9514 16 176
82003 9514 16 176
NA 9513 NA NA
41006 9512 1 163
NA 9511 NA NA
65005 9510 1 164
40003 9509 9 165
40011 9509 9 165
40012 9509 9 165
47004 9509 9 165
47009 9509 9 165
48010 9509 9 165
60004 9509 9 165
62001 9509 9 165
66006 9509 9 165
任何帮助都将不胜感激
谢谢这对你的工作应该有用
library(zoo)
df$Day<-as.POSIXct(df$Day,format="%m/%d/%y", origin = "1960-01-01")
df.z<-zoo(df[,-1],df$Day) #Day as Index
df.final <- merge(df.z,zoo(,seq(start(df.z),end(df.z),by="min")), all=TRUE)
图书馆(动物园)
df$Day这对你的工作应该有用
library(zoo)
df$Day<-as.POSIXct(df$Day,format="%m/%d/%y", origin = "1960-01-01")
df.z<-zoo(df[,-1],df$Day) #Day as Index
df.final <- merge(df.z,zoo(,seq(start(df.z),end(df.z),by="min")), all=TRUE)
图书馆(动物园)
df$Day您只需执行以下操作:
# create a vector with all the missing days
missing <- setdiff(max(df$Day):min(df$Day),df$Day)
# append the missing rows to the end of df data.frame (creating a new one)
df2 <- rbind(df,data.frame(colA=NA,Day=missing,colC=NA,colD=NA))
# sort the rows by Day
df2 <- df2[order(df2$Day),]
您可以简单地执行以下操作:
# create a vector with all the missing days
missing <- setdiff(max(df$Day):min(df$Day),df$Day)
# append the missing rows to the end of df data.frame (creating a new one)
df2 <- rbind(df,data.frame(colA=NA,Day=missing,colC=NA,colD=NA))
# sort the rows by Day
df2 <- df2[order(df2$Day),]
嗨,谢谢。很抱歉,我在as.POSIXct.numeric(ciao$Day,format=“%m/%d/%y”):“origin”必须被提供我认为是因为我的Day列实际上不是一个日期,而只是一个整数。@aaaaaa我知道,正在尝试复制您的错误。正在处理,将在工作时通知您。嗨,谢谢。很抱歉,我在as.POSIXct.numeric(ciao$Day,format=“%m/%d/%y”):“origin”必须被提供我认为是因为我的Day列实际上不是一个日期,而只是一个整数。@aaaaaa我知道,正在尝试复制您的错误。正在处理它,将在它工作时通知您。