我有一个关于检查哪个级别最高的问题。
这是我的数据:
Year Area V1 V2 V3
2014 USA 100 25 50
2014 USA 200 50 60
2014 USA 200 50 50
2014 USA 200 50 50
2014 USA 300 75 40
2014 ASIA 100 25 60
2014 ASIA 100 25 70
2014 ASIA 300 75 60
2014 ASIA 400 100 60
2014 ASIA 500 125 70
2015 USA 100 25 80
2015 USA 300 75 80
2015 USA 300 75 70
2015 USA 300 75 90
2015 USA 500 125 40
2015 ASIA 400 100 90
2015 ASIA 400 100 80
2015 ASIA 300 75 80
2016 USA 500 125 60
2016 USA 500 125 60
2016 ASIA 100 25 50
我想要的是:
Year Area V1 V2 V3 Count
2014 USA 200 50 50 5
2015 USA 300 75 80 5
2016 USA 500 125 60 2
2014 ASIA 100 25 60 5
2015 ASIA 400 100 80 3
2016 ASIA 100 25 50 1
在V1
中,有5个级别(100、200、300、400和500)。
在V2
中,也有5个级别,分别是0.25*V1
。
在V3
中,有6个级别。
我想要的结果是按 Year
和 Area
分组的。此外,V1
是最大级别数。例如,在 Year == 2014
和 Area == USA
中,V1
包含 1 个级别 100、3 个级别 200 和 1 个级别 300。所以,结果应该是 200,因为它是最多的。 V2
和 V3
相同。
有什么想法吗?
数据
dt <- fread("Year Area V1 V2 V3
2014 USA 100 25 50
2014 USA 200 50 60
2014 USA 200 50 50
2014 USA 200 50 50
2014 USA 300 75 40
2014 ASIA 100 25 60
2014 ASIA 100 25 70
2014 ASIA 300 75 60
2014 ASIA 400 100 60
2014 ASIA 500 125 70
2015 USA 100 25 80
2015 USA 300 75 80
2015 USA 300 75 70
2015 USA 300 75 90
2015 USA 500 125 40
2015 ASIA 400 100 90
2015 ASIA 400 100 80
2015 ASIA 300 75 80
2016 USA 500 125 60
2016 USA 500 125 60
2016 ASIA 100 25 50")
最佳答案
我们可以从@KenWilliam's answer here获取Mode
函数.
library(data.table)
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
按“年份”、“区域”分组(使用 data.table
语法,因为它已经是使用 fread
读取的 data.table
>),循环遍历data.table的子集(.SD
),使用Mode
获取频率最高的元素,同样使用获取列的频率>table
,求出总和
,通过取每行的最大值 (pmax
) 并连接 (c
)以及“Mode”列的列表
dt[, c(lapply(.SD, Mode),
Count = do.call(pmax, lapply(.SD, function(x) sum(table(x))))), by = .(Year, Area)]
# Year Area V1 V2 V3 Count
#1: 2014 USA 200 50 50 5
#2: 2014 ASIA 100 25 60 5
#3: 2015 USA 300 75 80 5
#4: 2015 ASIA 400 100 80 3
#5: 2016 USA 500 125 60 2
#6: 2016 ASIA 100 25 50 1
关于r - 按组计算级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46520985/