如何获得R中两个变量的数据比例?
我有4列:车辆ID、车辆类别、车辆长度和车辆宽度。每辆车都有一个唯一的车辆ID(例如2、4、5等),并且每0.1秒收集一次数据,这意味着车辆ID列中的车辆ID会重复出现的次数。“车辆类别”列中有三个车辆类别,即1=摩托车、2=轿车、3=卡车,长度和宽度在其各自的列中与每个车辆ID相对应。我想按车辆类别对数据进行子集划分,然后找出每个车型(唯一长度和宽度)在每个类别中的比例。例如,对于车辆类别=2,即汽车,我希望找到不同的汽车型号(唯一的长度和宽度)及其相对于汽车总数的比例。以下是我迄今为止所做的工作: 按车辆类别对数据进行子集划分 R给出一个错误,说明它找不到“乐趣”。请帮助我找到所有类别车辆中各车型的比例 编辑(示例输入) 注意,在此输入中:汽车总数=4辆,卡车=2辆,摩托车=1辆 样本输出如何获得R中两个变量的数据比例?,r,R,我有4列:车辆ID、车辆类别、车辆长度和车辆宽度。每辆车都有一个唯一的车辆ID(例如2、4、5等),并且每0.1秒收集一次数据,这意味着车辆ID列中的车辆ID会重复出现的次数。“车辆类别”列中有三个车辆类别,即1=摩托车、2=轿车、3=卡车,长度和宽度在其各自的列中与每个车辆ID相对应。我想按车辆类别对数据进行子集划分,然后找出每个车型(唯一长度和宽度)在每个类别中的比例。例如,对于车辆类别=2,即汽车,我希望找到不同的汽车型号(唯一的长度和宽度)及其相对于汽车总数的比例。以下是我迄今为止所做的
您应该给出示例输出和示例输入,以便更容易回答。据我所知,你想要类似的东西-
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