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

Я работаю над набором данных (называемым «счетами»), который содержит только числовые переменные, но также один фактор, указывающий страну, из которой числовые данные.Все это столбцы в одном наборе данных.

Я озадачен тем, чтобы сделать часть кода, которую я использую для поднабора, более независимой.Например, в наборе данных «очки» я использую следующее для создания подмножества для каждой страны:

scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]

Что мне нужно сделать, это сделать эту часть более независимой, чтобы когда кто-то, кто не знакомс R запускает его для другой группы стран, чтобы не всегда приходилось писать по одной строке для каждого уровня фактора.

Возможно, цикл, который проходит через фактор и просто создает столько подмножеств, сколько его уровней?

Заранее большое спасибо за любые идеи.

PS Я пытался использовать for i in length(scores$Country), но он возвращает одно подмножество со всеми странами вместе вместо трех.

Обновленный вопрос:

Вы правы, я был совершенно неясен.Мой набор данных находится на баллах 1-10 (мнение / восприятие), которые представляют порядковые данные для группы стран.Мой следующий шаг - рассчитать «NPS-Net Promoter Score» для каждой страны для всех столбцов.До сих пор я определяю каждую страну, а затем применяю функцию nps (пакет nps) для каждой, что приводит к новому списку, который содержит номер NPS каждого вопроса (столбцы с оценками).Пример кода для этого:

scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]          

nps_us<-round(sapply(scores_us, nps)*100)
nps_uk<-round(sapply(scores_uk, nps)*100) 
nps_it<-round(sapply(scores_it, nps)*100)

Метод split, который вы предлагаете, достигает подмножества без необходимости написания одной строки кода для каждой страны.Он генерирует список фреймов данных.Однако при использовании sapply / lapply для вычисления nps возвращается предупреждение: предоставлены данные класса data.frame;преобразованы в числовые, и элементы являются NA.

Возможно, потому что выходные списки имеют измерения, отличные от перечисленных кадров данных (lst1)?Или потому что nps не работает с семейством apply?

Ваша альтернатива group_by, а затем функция nps возвращает результат nps, но не в каждой стране.Вот что я использовал для этого: scores_df %>% group_by(Country) %>% lapply(., nps).

Если бы у nps был способ работать со списком фреймов данных, которые генерирует split, было бы именно то, что я искал.

Еще раз спасибо.

1 Ответ

0 голосов
/ 28 декабря 2018

Мы можем использовать split, чтобы разбить на list из data.frame с (при условии, что 'scores_df' и 'scores' имеют одинаковые измерения)

lst1 <- split(scores_df, scores$Country)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...