как применить функции к серии данных, отфильтрованных по категориальным переменным в R - PullRequest
0 голосов
/ 10 октября 2018

У меня есть фрейм данных df, содержащий 3 числовые переменные, 1 результат и 1 категориальную переменную

Мне нужно выполнить процедуру, которая включает в себя фильтрацию df по различным уровням категории A или B, а затем выгрузить ихв функцию, такую ​​как binnedplot, чтобы проверить взаимодействие между категориальными и числовыми переменными.

sample df:

set.seed(10)

df=data.frame(num1=sample(100,60), 
              num2=sample(100,60), 
              num3=sample(100,60),
              category=as.factor(rep(c("A","B"),30)),
              outcome=sample(c(0,1),60, replace=T))

   df1=df%>%filter(category=="A")
   df2=df%>%filter(category=="B")

binnedplot(df1$num1, df1$outcome)
binnedplot(df2$num1, df2$outcome)

binnedplot(df1$num2, df1$outcome)
binnedplot(df2$num2, df2$outcome)

binnedplot(df1$num3, df1$outcome)
binnedplot(df2$num3, df2$outcome)

Обновление:

split.dfs<-split(df, df$category)
par(mar=c(1,1,1,1))
par(mfcol=c(2,1))
lapply(split.dfs, function(x) lapply(df[1:3], function(x) binnedplot(x, df$outcome, main=df$category)))

Сначала я задавался вопросом, какмогу ли я сделать это с помощью функции более масштабируемым способом, например, я могу обрабатывать больше числовых и категориальных столбцов без слишком большого количества повторений.

Теперь с обновленным кодом (все еще есть ошибка) моя главная проблема - как маркировать3 панели 2х1 с правильным заголовком категории и как обозначить ось х с помощью num1 / num2 / num3 для ясности графика.

1 Ответ

0 голосов
/ 10 октября 2018

Вы можете использовать комбинацию by и lapply:

library(arm)

by(df, df$category,
   function(x) lapply(subset(x, select = -c(category, outcome)),
                      binnedplot, x$outcome))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...