我正在尝试计算与每个活跃投资者相关的公司总数。
'df'代表我的原始数据框,其中的'active_investors'列显示列出的每个公司的活跃投资者列表。例如,一行可能包含公司A,列出了投资者1,2,3,4。
我想做的是拆分数据框,以便将公司A显示为四个单独的行,即为每个投资者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)
问题在于某些投资者被列出两次,即,相同的投资者名称,但被列为两个单独的投资者。我不确定如何编制频率(即投资者投资的公司总数),以便删除这些重复项。
答案 0 :(得分:0)
尝试一下:
(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)