2013-05-24 20 views
5

を追加私のExcelデータファイルの形式は次のとおりです。欠落行

day     value 
01-01-2000 00:00:00 4 
01-01-2000 00:01:00 3 
01-01-2000 00:02:00 1 
01-01-2000 00:04:00 1 

私はこれで私のファイルを開きます。

私はコラム「値」にゼロの数と行を追加するにはどうすればよい
ts = read.csv(file=pathfile, header=TRUE, sep=",") 

データフレームに挿入する。出力例:

day     value 
01-01-2000 00:00:00 4 
01-01-2000 00:01:00 3 
01-01-2000 00:02:00 1 
01-01-2000 00:03:00 0 
01-01-2000 00:04:00 1 

答えて

1

試してください:あなたは、文字やない要因として、最初の列内の文字列を読み込む強制する必要が

ts = read.csv(file=pathfile, header=TRUE, sep=",", stringsAsFactors=F) 
ts.tmp = rbind(ts,list("01-01-2000 00:03:00",0)) 
ts.out = ts.tmp[order(ts.tmp$day),] 

お知らせそうでなければ、rbindに問題があるでしょう。ただやる後よりも因子であることが一日の列を取得するには、次の

ts.out$day = as.factor(ts.out$day) 
3

私は、これは使用して、すべてのタイムスタンプのシーケンスを作成するに頼るより一般的な解決策、だと思うその新しいデータフレームのための基礎として、該当する場合は、そのdfの元の値を入力します。

# convert original `day` to POSIX 
ts$day <- as.POSIXct(ts$day, format="%m-%d-%Y %H:%M:%S", tz="GMT") 

# generate a sequence of all minutes in a day 
minAsNumeric <- 946684860 + seq(0,60*60*24,by=60) # all minutes of your first day 
minAsPOSIX <- as.POSIXct(minAsNumeric, origin="1970-01-01", tz="GMT") # convert those minutes to POSIX 

# build complete dataframe 
newdata <- as.data.frame(minAsPOSIX) 
newdata$value <- ts$value[pmatch(newdata$minAsPOSIX, ts$day)] # fill in original `value`s where present 
newdata$value[is.na(newdata$value)] <- 0 # replace NAs with 0 
3

これはpadrパッケージで完全に自動化されました。コードは1行だけです。

original <- data.frame(
    day = as.POSIXct(c("01-01-2000 00:00:00", 
        "01-01-2000 00:01:00", 
        "01-01-2000 00:02:00", 
        "01-01-2000 00:04:00"), format="%m-%d-%Y %H:%M:%S"), 
    value = c(4, 3, 1, 1)) 

library(padr) 
library(dplyr) # for the pipe operator 
original %>% pad %>% fill_by_value(value) 

は、その作業のためvignette("padr")またはthisブログ記事を参照してください。