R 计算两列的百分比
我想计算一个数据帧的百分比,就像R 计算两列的百分比,r,dataframe,dplyr,percentage,R,Dataframe,Dplyr,Percentage,我想计算一个数据帧的百分比,就像 day hour place t1 t2 ___ ____ _____ __ ___ 1 0 1 5 10 1 0 2 6 12 1 0 3 9 8 1 1 1 6 12 1 1 2 8 15 1 1 3 10 18 1 2 1
day hour place t1 t2
___ ____ _____ __ ___
1 0 1 5 10
1 0 2 6 12
1 0 3 9 8
1 1 1 6 12
1 1 2 8 15
1 1 3 10 18
1 2 1 5 1
1 2 2 6 12
1 2 3 9 1
1 3 1 8 10
1 3 2 8 2
1 3 3 9 8
2 0 1 5 1
2 0 2 6 12
2 0 3 9 8
2 1 1 9 10
2 1 2 6 12
2 1 3 9 8
2 2 1 5 10
2 2 2 6 12
2 2 3 9 18
2 3 1 5 0
2 3 2 6 2
2 3 3 9 18
我想计算更多的两列,以小时为单位计算t1和t2的百分比
day hour place t1 t2 t1% t2%
___ ____ _____ __ ___ ___ ___
1 0 1 5 10 (5/20) (10/30)
1 0 2 6 12 (6/20) (12/30)
1 0 3 9 18 (9/20) (18/30)
1 1 1 6 12 (12/24) (12/45)
1 1 2 8 15 (15/24) (15/45)
1 1 3 10 18 (18/24) (18/45)
这意味着t1除以每个地方的天和小时的t1之和。我知道整列取和,但我想取每小时和每一天的和。
非常感谢您的帮助。您只需执行以下操作:
library(tidyverse)
df%>%
group_by(day,hour)%>%
mutate("t1%"=t1/sum(t1),"t2%"=t2/sum(t2))
您需要对天和小时使用
groupby()
,以便仅将一天中的小时分组在一起。这里有一个使用数据的类似选项。表语法。将“data.frame”转换为“data.table”,按“day”、“hour”分组,在.SDcol
中指定感兴趣的列,循环这些列(lappy(…
),进行计算,并分配(:=
)以创建新列
library(data.table)
setDT(df)[, paste0(names(df)[4:5], "_perc") :=
lapply(.SD, function(x) x/sum(x)), .(day, hour), .SDcols = t1:t2]
我们可以使用ave
的base R选项,并按day
和hour
对它们进行分组
df$t1perc <- ave(df$t1, df$day, df$hour, FUN = function(x) x/sum(x))
df$t2perc <- ave(df$t2, df$day, df$hour, FUN = function(x) x/sum(x))
df$t1perc这里是一个使用ave
和prop.table
的基本R选项
data.frame(df, sapply(df[, c("t1","t2")], function(i)
ave(i, df$day, df$hour, FUN = prop.table)))
我想你的拼写错误是t1/sum(t2)