我如何计算不同群体的同伴的价值?

时间:2019-06-30 00:09:10

标签: r dataframe

假设我的数据集中有5个不同的列。

General

在此样本中,有2组,而在第一组中,有2人。第一个有3人,第二人有2人。因此,前三行属于第一人称,第二行属于第二人称。

第4列是每组中的汽车数量。第一组有2辆车,第二组有1辆。

我想创建一个向量,并检查每个组中具有驾驶执照的人数是否大于汽车。 (如果为1,则为1,否则为0)。

最短和最好的方法是什么?

2 个答案:

答案 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")