Используйте функцию subset
, чтобы получить подмножество необходимого вам фрейма данных. Например. если df
ваш исходный фрейм данных, вы можете сделать:
df.d <- subset(df, day.night == 'd')
И тогда вы можете делать все, что захотите, на df.d
.
Чтобы заменить «большие» и «маленькие» значения их средними, вы можете сделать это в базе R, используя подход Джошуа (используя ave
и within
) или используя функцию ddply
из пакета plyr
:
require(plyr)
## ddply breaks up the data-frame according to the value of "DayNight" ('d' or 'n') and
## WITHIN each category, "transforms" the flux column as desired
ddply(df, .(DayNight), transform,
flux = ifelse( flux > mean(flux) + 2*sd(flux) | flux < mean(flux) - 2*sd(flux),
mean(flux),
flux ))
Я использую сокращенные версии имен ваших столбцов, но я уверен, что вы поняли идею. Если вам известен «правильный» уровень среднего и стандартного отклонения a priori , вы можете заменить mean(flux)
и sd(flux)
в приведенном выше коде этими значениями.