如何获得R中两个变量的数据比例?

如何获得R中两个变量的数据比例?,r,R,我有4列:车辆ID、车辆类别、车辆长度和车辆宽度。每辆车都有一个唯一的车辆ID(例如2、4、5等),并且每0.1秒收集一次数据,这意味着车辆ID列中的车辆ID会重复出现的次数。“车辆类别”列中有三个车辆类别,即1=摩托车、2=轿车、3=卡车,长度和宽度在其各自的列中与每个车辆ID相对应。我想按车辆类别对数据进行子集划分,然后找出每个车型(唯一长度和宽度)在每个类别中的比例。例如,对于车辆类别=2,即汽车,我希望找到不同的汽车型号(唯一的长度和宽度)及其相对于汽车总数的比例。以下是我迄今为止所做的

我有4列:车辆ID、车辆类别、车辆长度和车辆宽度。每辆车都有一个唯一的车辆ID(例如2、4、5等),并且每0.1秒收集一次数据,这意味着车辆ID列中的车辆ID会重复出现的次数。“车辆类别”列中有三个车辆类别,即1=摩托车、2=轿车、3=卡车,长度和宽度在其各自的列中与每个车辆ID相对应。我想按车辆类别对数据进行子集划分,然后找出每个车型(唯一长度和宽度)在每个类别中的比例。例如,对于车辆类别=2,即汽车,我希望找到不同的汽车型号(唯一的长度和宽度)及其相对于汽车总数的比例。以下是我迄今为止所做的工作:

按车辆类别对数据进行子集划分 R给出一个错误,说明它找不到“乐趣”。请帮助我找到所有类别车辆中各车型的比例

编辑(示例输入) 注意,在此输入中:汽车总数=4辆,卡车=2辆,摩托车=1辆

样本输出
您应该给出示例输出和示例输入,以便更容易回答。据我所知,你想要类似的东西-

library(data.table)
dt <- data.table(df)

dt2 <- dt[,
          list(ClassLengthWidthFreq = .N), 
          by = c('VehicleClass','VehicleLength','VehicleWidth')
          ]
dt2[,
    ClassLengthWidthFreqProportion := ClassLengthWidthFreq / sum(ClassLengthWidthFreq), 
    by = 'VehicleClass'
    ]

如果没有,请添加样本输出和样本输入。

我已经添加了样本输入和输出。该解决方案可以正常工作。它返回一个带有
Vehicleclass
列的表,而不是三个表。您可以在
dt2
上进行子集,如您在问题中所示,如果您愿意,可以获得三个单独的数据集,尽管我不明白为什么不能仅为一个数据集。感谢您的解决方案,它可以工作。唯一的问题是它没有给出正确的“ClassLengthWidthFreq”。它报告的频率远高于预期,例如,它报告的第一个值是18677(应用于原始数据时)。这可能是因为它正在计算同一辆车的重复次数,而它应该只计算一次。我刚刚发布了我的输出,它与您的样本输出相匹配(除非您的卡车频率在样本输出中计算不正确)。我不理解你在评论中提到的问题。我提到的是,在我使用你的代码时的原始数据中,输出频率是18677,这意味着18677辆车的长度=13.5,宽度=4.5。这是不正确的,因为我知道总共有2830辆车。我认为输出如此之大的原因是,对于给定的车型,它不是正确地计算同一车辆在一段时间内的重复次数,而是再次计算同一车型在表中找到的次数。
numofcars <- length(unique(cars$'Vehicle ID')) # 2830
numoftrucks <- length(unique(trucks$'Vehicle ID')) # 137
numofmotorcycles <- length(unique(motorcycles$'Vehicle ID'))# 45
by (cars, INDICES=cars$'Vehicle Length', FUN=table(cars$'Vehicle width'))
Vehicle ID Vehicle Class Vehicle Length Vehicle Width
2 2 13.5 4.5
2 2 13.5 4.5
2 2 13.5 4.5
2 2 13.5 4.5
3 2 13.5 4.0
3 2 13.5 4.0
3 2 13.5 4.0
3 2 13.5 4.0
4 2 10.0 4.5
4 2 10.0 4.5
4 2 10.0 4.5
4 2 10.0 4.5
5 3 23.0 4.5
5 3 23.0 4.5
5 3 23.0 4.5
5 3 23.0 4.5
6 3 76.5 4.5
6 3 76.5 4.5
6 3 76.5 4.5
6 3 76.5 4.5
6 3 76.5 4.5
7 1 10.0 3.0
7 1 10.0 3.0
7 1 10.0 3.0
7 1 10.0 3.0
8 2 13.5 5.5
8 2 13.5 5.5
8 2 13.5 5.5
8 2 13.5 5.5
Group: cars
VehicleLength VehicleWidth Proportion
13.5 4.5 0.25
13.5 4.0 0.25
13.5 5.5 0.25
23.0 4.5 0.25

Group:trucks
VehicleLength VehicleWidth Proportion
23.0 4.5 0.5
76.0 4.5 0.5

Group: motorcycles
VehicleLength VehicleWidth Proportion
10.0 3.0 1.0
library(data.table)
dt <- data.table(df)

dt2 <- dt[,
          list(ClassLengthWidthFreq = .N), 
          by = c('VehicleClass','VehicleLength','VehicleWidth')
          ]
dt2[,
    ClassLengthWidthFreqProportion := ClassLengthWidthFreq / sum(ClassLengthWidthFreq), 
    by = 'VehicleClass'
    ]
> dt2
   VehicleClass VehicleLength VehicleWidth ClassLengthWidthFreq ClassLengthWidthFreqProportion
1:            2          13.5          4.5                    4                      0.2500000
2:            2          13.5          4.0                    4                      0.2500000
3:            2          10.0          4.5                    4                      0.2500000
4:            3          23.0          4.5                    4                      0.4444444
5:            3          76.5          4.5                    5                      0.5555556
6:            1          10.0          3.0                    4                      1.0000000
7:            2          13.5          5.5                    4                      0.2500000