假设我的数据集中有5个不同的列。
General
在此样本中,有2组,而在第一组中,有2人。第一个有3人,第二人有2人。因此,前三行属于第一人称,第二行属于第二人称。
第4列是每组中的汽车数量。第一组有2辆车,第二组有1辆。
我想创建一个向量,并检查每个组中具有驾驶执照的人数是否大于汽车。 (如果为1,则为1,否则为0)。
最短和最好的方法是什么?
答案 0 :(得分:3)
使用ng-click="unique_order_directive(item.unique_order_id)"
,我们可以将每个$scope.unique_order_directive = function (uid) {
var item_index = $scope.data.findIndex( item => item.unique_order_id === uid )
$scope.showOrder = !$scope.showOrder
$scope.current_order_index = item_index
}
中dplyr
的数量与persons
的数量进行比较。
将具有驾驶执照的人数与每个组中的汽车数量进行比较:
Group
基于所有人,无论他们的驾驶状态如何:
cars
数据:
library(dplyr)
df1 %>%
filter(DrivingLicense=="(1)yes") %>%
mutate(MyVector=+(n_distinct(person)>cars)) %>%
group_by(Group) %>%
summarise(MyVector=max(MyVector)) %>%
left_join(df1, ., by="Group")
#> Group person DrivingLicense cars trips MyVector
#> 1 1 1 (1)yes 2 1 0
#> 2 1 1 (1)yes 2 2 0
#> 3 1 1 (1)yes 2 3 0
#> 4 1 2 (1)yes 2 1 0
#> 5 1 2 (1)yes 2 2 0
#> 6 2 1 (0)No 1 1 1
#> 7 2 1 (0)No 1 2 1
#> 8 2 2 (1)yes 1 1 1
#> 9 2 2 (1)yes 1 2 1
#> 10 2 2 (1)yes 1 3 1
由reprex package(v0.3.0)于2019-06-29创建
答案 1 :(得分:1)
如果我很好地理解了您的问题,那么您想计算每个拥有许可证的people
中的Group
的数量,并与该Group
中的汽车数量进行比较,并确定是否人数(person
)是否更大。
这可以通过data.table
来实现,它是一个非常快速的软件包,请参见?data.table
:
dt[`driving-license` %like% "yes",
.(peopleWithLicense = uniqueN(person), cars = mean(`#-cars`)),
by = Group][,
.(Group, peopleWithLicense,
cars,
morePeopleThanCars = peopleWithLicense > cars)][]
dt[
驾驶执照%like% "yes"
仅过滤获得许可的行。
.(peopleWithLicense = uniqueN(person), cars = mean('#-cars'))
计算变量person
中唯一值的数量,并将结果命名为peopleWithLicense
,并计算汽车by = Group
的平均值,这很简单-不言而喻。
][
是一个“链接命令”,也就是说,我们将第一个data.table的结果(对人和汽车进行过滤,分组的计算)传递给新的一组操作:
.(Group, peopleWithLicense, cars,
只需打印这些变量的值,而
morePeopleThanCars = peopleWithLicense > cars
检查人员是否多于汽车,然后将该[逻辑值]分配给变量。
最后的[]
将结果打印到屏幕上。
Group peopleWithLicense cars morePeopleThanCars
1: 1 2 2 FALSE
2: 2 1 1 FALSE
如果您希望使用0 / 1
值代替FALSE / TRUE
,则只需将最后一行替换为morePeopleThanCars = 1L * (peopleWithLicense > cars))][]
dt <- fread("Group person driving-license #-cars #trips
1 1 (1)yes 2 1
1 1 (1)yes 2 2
1 1 (1)yes 2 3
1 2 (1)yes 2 1
1 2 (1)yes 2 2
2 1 (0)No 1 1
2 1 (0)No 1 2
2 2 (1)yes 1 1
2 2 (1)yes 1 2
2 2 (1)yes 1 3")