我想计算数据框的百分比,如
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之和。我知道要对整列进行求和,但我想要计算每小时和每天的总和。 任何帮助表示赞赏。
答案 0 :(得分:3)
你可以这样做:
library(tidyverse)
df%>%
group_by(day,hour)%>%
mutate("t1%"=t1/sum(t1),"t2%"=t2/sum(t2))
您需要使用group_by()
数天和数小时,以便将一天中的小时数组合在一起。
答案 1 :(得分:2)
我们可以使用Intent danielIntent = new Intent(Broadcast.this, Broadcasting.class);
danielIntent.putExtra("keyvalue","Free Loop");
startActivity(danielIntent);
的基本R选项,并按ave
和day
hour
答案 2 :(得分:2)
以下是使用ave
和prop.table
,
data.frame(df, sapply(df[, c("t1","t2")], function(i)
ave(i, df$day, df$hour, FUN = prop.table)))
答案 3 :(得分:1)
以下是使用data.table
语法的类似选项。将'data.frame'转换为'data.table',按'day','hour'分组,指定.SDcol
中感兴趣的列,循环遍历那些(lapply(..
),进行计算,并指定它(:=
)来创建新列
library(data.table)
setDT(df)[, paste0(names(df)[4:5], "_perc") :=
lapply(.SD, function(x) x/sum(x)), .(day, hour), .SDcols = t1:t2]