【问题标题】:Subset one dataframe with each row values of another dataframe and sum distance column使用另一个数据帧的每一行值和总和距离列对一个数据帧进行子集
【发布时间】:2019-06-05 02:40:50
【问题描述】:

我有两个数据框 df1 和 df2,我想按 df1$delivery 分组并创建 df2 的子集,其中一列 df2$destination 等于 df1$facility 列,另一个 df2$source 列不等于相同的 df1$facility 和对 df2$distance 列求和

df1

facility delivery vol
ludhiana  abohar 123
delhi     abohar 234
mumbai    abohar 345
delhi     Adampu 739
jaipur    Adampu 21757
lucknow   Adampu 37449

df2

 source    destination dist
   delhi    ludhiana    10
   mumbai   ludhiana    5
   ludhiana delhi       10
   mumbai   delhi       5
   ludhiana mumbai      5
   delhi    mumbai      5
   delhi    jaipur      5
   jaipur   delhi       5
   delhi    lucknow     10
   lucknow  delhi       10
   jaipur   lucknow     5
   lucknow  jaipur      5

预期输出

facility delivery vol   pan_india_dist
ludhiana  abohar  123   10
delhi     abohar  234   15
mumbai    abohar  345   10
delhi     Adampu  739   15
jaipur    Adampu  21757 10
lucknow   Adampu  37449 15

x <- sapply(data4$facility,function(i)sum((mh_mh$destination[data4$facility %in% i]) & (mh_mh$source[!data4$facility %in% i]))

我试过这个公式,但它抛出了没有意义的因素错误

【问题讨论】:

  • 您能解释一下如何获得第一行的值 10 吗?
  • 你能用dputreprex做一个可重现的例子吗?这将使人们更容易帮助您解决问题。 stackoverflow.com/questions/5963269/…
  • 对不起第一行是15,第一行达到15的逻辑如下,对于df1中的每个设施名称,例如:ludhiana,filter df2$destination = ludhiana and df2 $source != ludhiana,并添加 df2$dist 列中的所有值,groupby df1$delivery

标签: r dplyr sum conditional-statements


【解决方案1】:

raptidyverse 的选项

library(rap)
library(tidyverse)
df1 %>% 
    rap(x = ~ filter(df2, destination == facility, source != facility)) %>% 
    mutate(x = map2(x, delivery, ~ 
             .x %>% 
               filter(source %in% df1$facility[df1$delivery == .y])  %>% 
               summarise(pan_india_dist = sum(dist)))) %>%
    unnest
#  facility delivery   vol pan_india_dist
#1 ludhiana   abohar   123             15
#2    delhi   abohar   234             15
#3   mumbai   abohar   345             10
#4    delhi   Adampu   739             15
#5   jaipur   Adampu 21757             10
#6  lucknow   Adampu 37449             15

【讨论】:

  • 找不到说唱库,我已经安装了说唱库,但该功能不属于该包
  • Ops.factor(destination, facility) 中的错误:因子的级别集不同
  • @VasukiRao 我将数据集列作为“字符”而不是设施、交付、目的地、来源等因素
  • 快速补充同一个问题,如果我想在求和之前取 vol * dist 的乘积,代码需要做哪些更改。 IE。 sum(vol X product) 将给出加权距离
  • @VasukiRao 不应该 sum(vol * dist)summarise 中工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2020-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
相关资源
最近更新 更多