Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将分组数据帧乘以矩阵dplyr 我的问题是:_R_Data.table_Dplyr - Fatal编程技术网

将分组数据帧乘以矩阵dplyr 我的问题是:

将分组数据帧乘以矩阵dplyr 我的问题是:,r,data.table,dplyr,R,Data.table,Dplyr,我有两个数据框,一个用于行业,一个用于职业。它们按州嵌套,并显示就业情况 我还有一个协调矩阵,它显示了每个行业中每个职业的权重 我想在职业数据框架中使用行业就业人数和协调矩阵创建一个新的就业人数 我对我的问题做了一个虚拟版本——我想这是很清楚的: 更新 我已经解决了这个问题,但我想知道是否有更优雅的解决方案?事实上,我的维度是7个州*200个行业*350个职业它变得非常需要数据 # create industry data frame set.seed(12345) ind_df <-

我有两个数据框,一个用于行业,一个用于职业。它们按州嵌套,并显示就业情况

我还有一个协调矩阵,它显示了每个行业中每个职业的权重

我想在职业数据框架中使用行业就业人数和协调矩阵创建一个新的就业人数

我对我的问题做了一个虚拟版本——我想这是很清楚的:

更新 我已经解决了这个问题,但我想知道是否有更优雅的解决方案?事实上,我的维度是7个州*200个行业*350个职业它变得非常需要数据

# create industry data frame

set.seed(12345)

ind_df <- data.frame(State = c(rep("a", len =6),rep("b", len =6),rep("c", len =6)),
                 industry = rep(c("Ind1","Ind2","Ind3","Ind4","Ind5","Ind6"), len = 18),
                 emp = rnorm(18,20,2))


# create occupation data frame

Occ_df <- data.frame(State = c(rep("a", len = 5), rep("b", len = 5), rep("c", len =5)),
                     occupation = rep(c("Occ1","Occ2","Occ3","Occ4","Occ5"), len = 15),
                     emp = rnorm(15,10,1))

# create concordance matrix
                     
Ind_Occ_Conc <- matrix(rnorm(6*5,1,0.5),6,5) %>% as.data.frame()

# name cols in the concordance matrix 

colnames(Ind_Occ_Conc) <- unique(Occ_df$occupation)
rownames(Ind_Occ_Conc) <- unique(ind_df$industry)

  

# solution 

Ind_combined <- cbind(Ind_Occ_Conc, ind_df)

Ind_combined <- Ind_combined %>%
  group_by(State) %>% 
  mutate(Occ1 = emp*Occ1,
         Occ2 = emp*Occ2,
         Occ3 = emp*Occ3,
         Occ4 = emp*Occ4,
         Occ5 = emp*Occ5
         )

Ind_combined <- Ind_combined %>% 
  gather(key = "occupation",
         value = "emp2",
         -State,
         -industry,
         -emp
         )

Ind_combined <- Ind_combined %>%
  group_by(State, occupation) %>%
  summarise(emp2 = sum(emp2))


Occ_df <- left_join(Occ_df,Ind_combined)
  
#创建行业数据框架
种子集(12345)

ind_df我不确定你想用sum(ind$emp*Occ1_coeff)行做什么,但也许这就是你想要的:

# Instead of doing the computation only for state a, get expected outcomes for all states (with dplyr):
Ind <- ind_df %>% group_by(State) %>%
        summarize(rez = sum(emp))

# Then do some computations on Ind, which is a N element vector (one for each state)
# ...

# And finally, join Ind and Occ_df using merge
Occ_df <- merge(x = Occ_df, y = Ind, by = "State", all = TRUE)
#不要只对状态a进行计算,而是获取所有状态的预期结果(使用dplyr):
按(州)划分的组%u的索引%>%
汇总(rez=总和(emp))
#然后在Ind上做一些计算,它是一个N元素向量(每个状态一个)
# ...
#最后,使用merge连接Ind和Occ_df

Occ\u df请使用
set.seed
rnorm
复制您的示例,然后还请显示基于该输入数据的预期输出
Ind\u df$emp
Ind\u Occ\u Conc
值之间的关系/等式是什么?您需要编辑您的问题以提供预期的输出。谢谢两位,都是好的评论。我试图在上面更清楚地说明这一点,逐步完成了我期望的计算。