我一直在寻找,但仍然没有找到答案。我希望根据我的标准查看和计算某些结果。 if
和match
功能无法获得我想要的功能。原始数据集如下所示:
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
任何建议表示赞赏。非常感谢你!
答案 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)