gpt4 book ai didi

r - apply() 并计算所有数据帧行的第一行的比例

转载 作者:行者123 更新时间:2023-12-02 06:23:16 25 4
gpt4 key购买 nike

我有一个数据框,如下所示,列出了按车辆类型分类的受伤人数:

trqldnum <- data.frame(motorveh=c(796,912,908,880,941,966,989,984),
motorcyc=c(257,295,326,313,403,389,474,496),
bicyc=c(109,127,125,137,172,146,173,178))
trqldnum

# motorveh motorcyc bicyc
#1 796 257 109
#2 912 295 127
#3 908 326 125
#4 880 313 137
#5 941 403 172
#6 966 389 146
#7 989 474 173
#8 984 496 178

目前我正在计算每种车辆类型第一行的比例:

trqldprop <- t(apply(trqldnum,1,function(x) {
x/c(trqldnum[1,1],trqldnum[1,2],trqldnum[1,3])
}))
trqldprop

# motorveh motorcyc bicyc
#1 1.000000 1.000000 1.000000
#2 1.145729 1.147860 1.165138
#3 1.140704 1.268482 1.146789
#4 1.105528 1.217899 1.256881
#5 1.182161 1.568093 1.577982
#6 1.213568 1.513619 1.339450
#7 1.242462 1.844358 1.587156
#8 1.236181 1.929961 1.633028

这看起来有点难看,如果数据改变形状,我需要手动更改函数的分母。如果我尝试在 apply() 语句中使用以下内容,我最终会在列表的列表中得到输出。

function(x) x/c(trqldnum[1,])

我更愿意以上面的数据框结果结束,但我只是在试图弄清楚它时陷入困惑。

最佳答案

将数据帧转换为矩阵并使用矩阵运算:

m <- as.matrix(trqldnum)

trqldprop <- as.data.frame( t(t(m)/m[1,]) )

> trqldprop
motorveh motorcyc bicyc
1 1.000000 1.000000 1.000000
2 1.145729 1.147860 1.165138
3 1.140704 1.268482 1.146789
4 1.105528 1.217899 1.256881
5 1.182161 1.568093 1.577982
6 1.213568 1.513619 1.339450
7 1.242462 1.844358 1.587156
8 1.236181 1.929961 1.633028

请注意,我们需要转置矩阵(请参阅 t(m)),因为当您将矩阵除以向量时,操作是按列进行的。

关于r - apply() 并计算所有数据帧行的第一行的比例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com