Я работаю над набором данных (называемым «счетами»), который содержит только числовые переменные, но также один фактор, указывающий страну, из которой числовые данные.Все это столбцы в одном наборе данных.
Я озадачен тем, чтобы сделать часть кода, которую я использую для поднабора, более независимой.Например, в наборе данных «очки» я использую следующее для создания подмножества для каждой страны:
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
, было бы именно то, что я искал.
Еще раз спасибо.