Как объединить повторяющиеся категории в одном и том же кадре данных? - PullRequest
0 голосов
/ 15 апреля 2019

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

'df' представляет мой исходный фрейм данных, в котором столбец 'active_investors' отображает список активных инвесторов для каждой из перечисленных компаний.Например, одна строка может содержать Компанию А, в которой перечислены инвесторы 1,2,3,4.

Я пытаюсь разбить информационный фрейм так, чтобы он отображал компанию А в виде четырех отдельных строк, то есть для каждого инвестора.1, 2, 3 и 4.

Пока у меня есть следующий код:

#Separate names of investors for each company
df1 = df %>% separate_rows(active_investors, sep = ",")

#Total number of companies each investor has invested in 
investor = aggregate(data.frame(count = df1$company_name), list(active_investors = df1$active_investors), length)

Проблема в том, что некоторые инвесторы перечислены дважды, то есть одно и то же имя инвестора, но перечисленыкак два отдельных инвестора.Я не уверен, как скомпилировать частоты (т. Е. Общее количество компаний, в которые инвестировал инвестор), чтобы эти дубликаты были удалены.

1 Ответ

0 голосов
/ 20 апреля 2019

Попробуйте это:

(df <- data.frame(company_name=c(1:3),b=c("1,2,3","2,3,4","4,5"))) 
test_investors <- df %>% 
                  mutate(b1 = str_split(string=b,pattern=",")) %>% 
                  select(b1) %>% 
                  pull(.) 
 max_investors <- lapply(test_investors,function(x)length(x)) %>% 
                   unlist(.) %>% 
                  max(.)
 unique_investors <- df %>% 
                      separate(b,sep=",",
                              into=paste0("investor_",c(1:max_investors))) %>% 
                     select(company_name,starts_with("investor_")) %>% 
                     gather(-company_name,key="variable",value="investor") %>% 
                     filter(!is.na(investor)) %>% 
                     select(-variable)
...