Rにインポートしたタブ区切りのテキストファイルがあります。インポートには次のコマンドを使用しました。
_data = read.table(soubor, header = TRUE, sep = "\t", dec = ".", colClasses =c("numeric","numeric","character","Date","numeric","numeric"))
_
str(data)
を実行して列のデータ型を確認すると、次の結果が得られます。
_'data.frame': 211931 obs. of 6 variables:
$ DataValue : num 0 0 0 0 0 0 0 0 0 NA ...
$ SiteID : num 1 1 1 1 1 1 1 1 1 1 ...
$ VariableCode: chr "Sucho" "Sucho" "Sucho" "Sucho" ...
$ DateTimeUTC : Date, format: "2012-07-01" "2012-07-02" "2012-07-03" "2012-07-04" ...
$ Latitude : num 50.8 50.8 50.8 50.8 50.8 ...
$ Longitude : num 15.6 15.6 15.6 15.6 15.6 ...
_
データの最初の20行の再現可能なサンプルは次のとおりです。
my_sample = dput(data [1:20、])
_structure(list(DataValue = c(0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
NA, NA, NA, NA, NA, NA, 0, 0, 0), SiteID = c(1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), VariableCode = c("Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho", "Sucho",
"Sucho", "Sucho", "Sucho", "Sucho", "Sucho"), DateTimeUTC = structure(c(15522,
15523, 15524, 15525, 15526, 15527, 15528, 15529, 15530, 15531,
15532, 15533, 15534, 15535, 15536, 15537, 15538, 15539, 15540,
15541), class = "Date"), Latitude = c(50.77, 50.77, 50.77, 50.77,
50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77,
50.77, 50.77, 50.77, 50.77, 50.77, 50.77, 50.77), Longitude = c(15.55,
15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55,
15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55, 15.55,
15.55)), .Names = c("DataValue", "SiteID", "VariableCode", "DateTimeUTC",
"Latitude", "Longitude"), row.names = c(NA, 20L), class = "data.frame")
_
次に、日付でテーブルをフィルタリングします。 for
ループ内でコードを実行していることに注意してください。まず、2012年7月1日までにデータをサブセット化し、処理を行います。次に、7月2日までにデータのサブセットを作成し、いくつかの処理などを行います。たとえば、2012年7月6日と等しい日付のすべての行を取得します。コードを試しました。
_startDate = as.Date("2012-07-01");
endDate = as.Date("2012-07-20");
all_dates = seq(startDate, endDate, 1);
#the following code I'm trying to run inside a loop...
for (j in 1:length(all_dates)) {
filterdate = all_dates[j];
my_subset = my_sample[my_sample$DateTimeUTC == filterdate,]
#now I want do do some processing on my_subset...
}
_
ただし、上記のコードは、ループのステップ7から始まる空のデータセットを返します。
したがって、たとえば:
_subset_one = my_sample[my_sample$DateTimeUTC == all_dates[6],]
_
戻り値:_3 obs of 6 variables
_。
しかし、何らかの未知の理由で、例:
_subset_two = my_sample[my_sample$DateTimeUTC == all_dates[7],]
_
戻り値:_0 obs of 6 variables
_。
(注:上記のコードを編集して、問題を100%再現可能にしました)
私が間違っていることは何ですか?
次の解決策で問題が解決しました。Date
データ型を使用する代わりに、POSIXct
データ型を使用しようとしました。以下は、タブ区切りテキストファイルを読み取るためのサンプルコードです。その後、サブセットはfor
ループのすべてのステップで機能します。
data = read.table("data.txt", header = TRUE, sep = "\t", dec = ".",
colClasses =c("numeric","numeric","character","POSIXct","numeric","numeric"));
startDate = as.POSIXct("2012-07-01");
endDate = as.POSIXct("2012-07-20");
all_dates = seq(startDate, endDate, 86400); #86400 is num of seconds in a day
#the following code I'm trying to run inside a loop...
for (j in 1:length(all_dates)) {
filterdate = all_dates[j];
my_subset = data[data$DateTimeUTC == filterdate,]
#now I want do do some processing on my_subset...
}