У меня есть фрейм данных (df), который я хочу установить в соответствии со значением столбца t. В моем конвейере это сделано в al oop, что позволяет мне обрабатывать при каждом повторении l oop только ту часть кадра данных, которая имеет определенный t. Вот часть фрейма данных:
df
t d avrg se s_n
105 4.034 574.383 533.3125 15.842750 0.5742241
106 4.034 579.906 526.2601 16.520519 0.5666307
107 4.034 585.429 517.3978 16.603408 0.5570885
108 4.034 590.951 514.8851 16.378100 0.5543831
109 4.034 596.474 517.5682 16.031580 0.5572721
110 4.034 601.997 524.1770 16.301832 0.5643879
111 4.034 607.520 521.1787 16.773292 0.5611595
112 4.034 613.043 511.4275 17.079401 0.5506602
113 4.034 618.566 506.8916 16.757593 0.5457765
114 4.034 624.089 511.3979 17.165346 0.5506284
115 4.034 629.612 511.7480 17.175872 0.5510053
116 4.034 635.135 509.7872 17.862666 0.5488941
117 4.034 640.658 507.4556 19.080856 0.5463837
118 4.244 0.000 984.5679 1.842083 1.0600964
119 4.244 5.523 1040.4532 4.488659 1.1202687
120 4.244 11.046 1284.3719 24.832460 1.3828990
121 4.244 16.569 1503.8378 49.605517 1.6192007
122 4.244 22.092 1558.5444 49.223158 1.6781039
123 4.244 27.615 1631.0177 36.870109 1.7561368
124 4.244 33.137 1741.2543 30.006613 1.8748300
125 4.244 38.660 1872.4405 37.725207 2.0160797
, чтобы получить уровни t, я делаю это:
times<-as.numeric(levels(as.factor(df$t)))
Затем, как I l oop, я подмножество мой фрейм данных выглядит так:
for (j in times) {
df_t <- df[df$t==j,]
*and here all the things I need to do with df_t**
}
Я заметил, что подмножество работает хорошо для некоторых значений t, но не для других. Например:
> df_t <- df[df$t==times[1],]
> df_t
t d avrg se s_n
105 4.034 574.383 533.3125 15.84275 0.5742241
106 4.034 579.906 526.2601 16.52052 0.5666307
107 4.034 585.429 517.3978 16.60341 0.5570885
108 4.034 590.951 514.8851 16.37810 0.5543831
109 4.034 596.474 517.5682 16.03158 0.5572721
110 4.034 601.997 524.1770 16.30183 0.5643879
111 4.034 607.520 521.1787 16.77329 0.5611595
112 4.034 613.043 511.4275 17.07940 0.5506602
113 4.034 618.566 506.8916 16.75759 0.5457765
114 4.034 624.089 511.3979 17.16535 0.5506284
115 4.034 629.612 511.7480 17.17587 0.5510053
116 4.034 635.135 509.7872 17.86267 0.5488941
117 4.034 640.658 507.4556 19.08086 0.5463837
> df_t1 <- df[df$t==times[2],]
> df_t1
[1] t d avrg se s_n
<0 rows> (or 0-length row.names)
Почему подмножество работает с некоторыми значениями моих уровней, а не с другими? Если я проверяю их вручную, значения кажутся правильными, и мой фрейм данных явно содержит эти значения в столбце t ...
> times[1]
[1] 4.034
> times[2]
[1] 4.244
Я также попробовал другие способы поднабора, например:
> subset.data.frame(df, df$t==times[2])
[1] t d avrg se s_n
<0 rows> (or 0-length row.names)
> subset.data.frame(df, df$t==times[1])
t d avrg se s_n
105 4.034 574.383 533.3125 15.84275 0.5742241
106 4.034 579.906 526.2601 16.52052 0.5666307
107 4.034 585.429 517.3978 16.60341 0.5570885
108 4.034 590.951 514.8851 16.37810 0.5543831
109 4.034 596.474 517.5682 16.03158 0.5572721
110 4.034 601.997 524.1770 16.30183 0.5643879
111 4.034 607.520 521.1787 16.77329 0.5611595
112 4.034 613.043 511.4275 17.07940 0.5506602
113 4.034 618.566 506.8916 16.75759 0.5457765
114 4.034 624.089 511.3979 17.16535 0.5506284
115 4.034 629.612 511.7480 17.17587 0.5510053
116 4.034 635.135 509.7872 17.86267 0.5488941
117 4.034 640.658 507.4556 19.08086 0.5463837
>
Но, как вы можете видеть, поднабор все еще работает с одним значением, а не с другим. Есть ли у вас какие-либо предложения о том, как решить эту проблему?
UPDATE1
Как предлагается в комментариях, использование
times <- unique(dt$t)
вместо моего первого метода работает хорошо и Кажется, сейчас проблема решена.
UPDATE2
Следуя некоторым комментариям, здесь я попытаюсь предоставить воспроизводимую форму моего df
> dput(df)
structure(list(t = c(4.034, 4.034, 4.034, 4.034, 4.034, 4.034,
4.034, 4.034, 4.034, 4.034, 4.034, 4.034, 4.034, 4.244, 4.244,
4.244, 4.244, 4.244, 4.244, 4.244, 4.244), d = c(574.383, 579.906,
585.429, 590.951, 596.474, 601.997, 607.52, 613.043, 618.566,
624.089, 629.612, 635.135, 640.658, 0, 5.523, 11.046, 16.569,
22.092, 27.615, 33.137, 38.66), avrg = c(533.312475247525, 526.260069306931,
517.397752475248, 514.885089108911, 517.568217821782, 524.17702970297,
521.178702970297, 511.427475247525, 506.891643564356, 511.397861386139,
511.74796039604, 509.787158415842, 507.455584158416, 984.567900990099,
1040.45316831683, 1284.37189108911, 1503.83781188119, 1558.54437623762,
1631.01772277228, 1741.25434653465, 1872.44046534653), se = c(15.8427501449439,
16.5205192226773, 16.6034079506853, 16.3780996947454, 16.0315801572497,
16.3018319583687, 16.7732924683709, 17.0794011397917, 16.7575928861432,
17.1653457253679, 17.1758716618221, 17.8626655326283, 19.0808563725021,
1.84208337262486, 4.48865895211631, 24.8324597734051, 49.6055165744209,
49.2231582153052, 36.8701085501606, 30.0066129040664, 37.7252068402058
), s_n = c(0.574224096797455, 0.566630684643339, 0.557088519188004,
0.554383103659479, 0.557272061321729, 0.564387850300072, 0.561159515055948,
0.550660248318982, 0.545776462597893, 0.550628362710457, 0.551005318617323,
0.548894099025929, 0.546383664366651, 1.06009635986746, 1.12026871405828,
1.38289900076007, 1.61920065503164, 1.67810388524744, 1.75613682819789,
1.8748299558705, 2.01607966234353)), .Names = c("t", "d", "avrg",
"se", "s_n"), row.names = 105:125, class = "data.frame")
>