Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 我如何计算不同组的coulmn的值?_R_Dataframe - Fatal编程技术网

R 我如何计算不同组的coulmn的值?

R 我如何计算不同组的coulmn的值?,r,dataframe,R,Dataframe,假设我的数据集中有5个不同的列 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

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

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
在这个样本中有2组,第一组有2人。第一组有3次旅行,第二组有2次旅行。因此,前3行属于第一人称,后2行属于第二人称

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

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


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

使用
dplyr
我们可以将每个
组的
人数
汽车的数量进行比较


将持有驾驶执照的人数与每组的汽车数量进行比较:

库(dplyr)
df1%>%
筛选器(DrivingLicense==“(1)是”)%>%
突变(MyVector=+(n_不同的(人)>车))%>%
分组依据(分组)%>%
汇总(MyVector=最大值(MyVector))%>%
左联合(df1,by=“Group”)
#>团体人员驾驶许可证车辆旅行MyVector
#>1(1)是2 1 0
#>2 1(1)是2 0
#>31(1)是23 0
#>4 1 2(1)是2 1 0
#>5 1 2(1)是2 0
#>6 2 1(0)第1号
#>7 2 1(0)第1 2 1号
#>8 2(1)是1
#>9 2(1)是1 2 1
#>102(1)是13 1

基于所有人员,无论其驾驶状态如何:

df1%>%
分组依据(分组)%>%
变异(MyVector=+(n_不同的(人)>车))
#>#tibble:10 x 6
#>#组:组[2]
#>团体人员驾驶许可证车辆旅行MyVector
#>                      
#>1(1)是2 1 0
#>2 1(1)是2 0
#>31(1)是23 0
#>4 1 2(1)是2 1 0
#>5 1 2(1)是2 0
#>6 2 1(0)第1号
#>7 2 1(0)第1 2 1号
#>8 2(1)是1
#>9 2(1)是1 2 1
#>102(1)是13 1
数据:


df1如果我能很好地理解你的问题,你需要计算每个
组中拥有驾照的
人数,与该
组中的汽车数量进行比较,并确定人数(
)是否更多

这可以通过
数据来实现。表
,这是一个非常快速的包,请参见
?数据。表

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
,并通过=Group
计算汽车的平均值,这是不言自明的

][
是一个“链式命令”,也就是说,我们将第一个data.table的结果(对人员和车辆进行过滤、分组计算)传递给一组新的操作:

(组、有许可证的人、汽车,
只需打印这些变量的值,而
morePeopleThanCars=peopleWithLicense>cars
检查人员是否多于车辆,并将该[逻辑值]分配给变量。 最后的
[]
将结果打印到屏幕上

输出是 如果您希望使用
0/1
值,而不是
FALSE/TRUE
,则只需将最后一行替换为
morePeopleThanCars=1L*(peopleWithLicense>cars))[]

我使用的数据:
dt您能澄清一下“持有驾驶执照的人数是否超过汽车数量”吗?@heds1例如,在第一组中,2人有D-L,有2辆汽车,因此我的新向量为0。在第二组中,同样的情况是,一个人有D-L,有一辆车。@heds1我的意思是,在每组中,如果#车小于PP,有D#L或NOT,我删除了没有的行,然后使用你的第一个答案。它工作得很好。
   Group peopleWithLicense cars morePeopleThanCars
1:     1                 2    2              FALSE
2:     2                 1    1              FALSE
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")