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