根据所选标准返回并计算值

时间:2016-05-05 21:45:15

标签: r

我一直在寻找,但仍然没有找到答案。我希望根据我的标准查看和计算某些结果。 ifmatch功能无法获得我想要的功能。原始数据集如下所示:

Type  Name  Value
A     DK    3
A     MO    2
A     OM    5
A     LSO   3
B     GOP   6
B     ADG   5
C     BFC   7
D     TMD   6

我想得到的是Type = A,然后列出名称并根据值计算权重,如下所示:

DK    0.081
MO    0.054
OM    0.135
LSO   0.081

任何建议表示赞赏。非常感谢你!

3 个答案:

答案 0 :(得分:3)

require(dplyr)


d<-data.frame(Type=c("A","A","A","A","B","B","C","D"),
              Name = c("DK","MO","OM","LSO","GOP","ADG","BFC","TMD "),
              Value=c(3,2,5,3,6,5,7,6)
             )

dd<- d %>% 
      mutate(den=sum(Value)) %>% 
      filter(Type=="A") %>% 
      group_by(Name) %>% 
      summarise(Y=Value/min(den))
dd

答案 1 :(得分:2)

如果性能很重要并且您有大量数据,请使用数据包data.table中的data.table:

dt <- data.table( type=c("A", "A", "A", "A", "B", "B", "C", "D")
                  , name=c("DK", "MO", "OM", "LSO", "GOP", "ADG", "BFC", "TMD")
                  , value=c(3, 2, 5, 3, 6, 5, 7, 6))

value.total <- sum(dt$value)

dt[type=="A", .(name, weight=value/value.total)]

这将导致:

   name     weight
1:   DK 0.08108108
2:   MO 0.05405405
3:   OM 0.13513514
4:  LSO 0.08108108

如果你想计算每一行的重量(&#34;比例&#34;)(不仅仅是&#34; A&#34;),请使用:

dt[, .(name, weight=value/value.total)]

结果是:

   name     weight
1:   DK 0.08108108
2:   MO 0.05405405
3:   OM 0.13513514
4:  LSO 0.08108108
5:  GOP 0.16216216
6:  ADG 0.13513514
7:  BFC 0.18918919
8:  TMD 0.16216216

答案 2 :(得分:1)

public function nearbyRestaurants(Request $request, $latitude, $longitude, $radius)
相关问题