Я пытаюсь запустить регрессию (lm) по группам данных (округов) в кадре данных. Тем не менее, я сначала хочу отфильтровать этот фрейм данных (dat), чтобы исключить некоторые группы с слишком небольшим количеством точек данных. Я получаю получить все, чтобы работать хорошо до тех пор, пока я не Подмножество фрейм данных первой:Ошибка в R Подстановка кадра данных, а затем использование sapply
tmp1 <- with(dat,
by(dat, County,
function(x) lm(formula = Y ~ A + B + C, data=x)))
sapply(tmp1, function(x) summary(x)$adj.r.squared)
я получить обратно, как и ожидалось:
Barrow Carroll Cherokee Clayton Cobb Dekalb Douglas
0.00000 NaN 0.61952 0.69591 0.48092 0.61292 0.39335
Однако, когда я первый подмножество кадра данных:
dat.counties <- aggregate(dat[,"County"], by=list(County), FUN=length)
good.counties <- as.matrix(subset(dat.counties, x > 20, select=Group.1))
dat.temp <- dat["County" %in% good.counties,]
, а затем запустить тот же код:
tmp2 <- with(dat,
by(dat, County,
function(x) lm(formula = Y ~ A + B + C, data=x)))
sapply(tmp2, function(x) summary(x)$adj.r.squared)
Я получаю следующую ошибку: «$ operator недействителен для атомных векторов». Если я затем запустить summary(tmp2)
я вижу следующее:
Length Class Mode
Barrow 0 -none- NULL
Carroll 0 -none- NULL
Cherokee 12 lm list
Clayton 12 lm list
sapply явно разбомбить на класс -отсутствует- объектов. Но это те, которые я исключил выше! Как они все еще появляются в моем новом кадре данных ?!
Благодарим вас за просвещение.
Пожалуйста, сделайте ваш вопрос ** [воспроизводимый] (Http: // StackOverflow .com/вопросы/5963269/как в изготовлении, а-пре-р-воспроизводимый-пример) **. Гораздо легче помочь, когда вы это сделаете. Обратите внимание, что вы используете неправильный 'dat' в своей второй части кода (должен быть' dat.temp'), но я не думаю, что это проблема. – BrodieG