我正在处理一个带有六位数分组系统的数据集。前两个数字表示顶层的分组,后两个数字表示不同的子组,后两个数字表示子组内的特定类型。我想将数据分组到层次结构中的顶层(仅限两个第一位),并计算每个组中的唯一名称。
GroupID 010203的一个示例:
在这个例子中我关心的是每个品牌有多少。
玩具数据集和想要的输出:
df <- data.table(Quarter = c('Q4', 'Q4', 'Q4', 'Q4', 'Q3'),
GroupID = c(010203, 150503, 010101, 150609, 010000),
Name = c('AAAA', 'AAAA', 'BBBB', 'BBBB', 'CCCC'))
输出:
Quarter Group Counts
Q3 01 1
Q4 01 2
Q4 15 2
答案 0 :(得分:2)
我们可以使用data.table
:
library(data.table)
dt[, Group := substr(GroupID, 1, 2)][
, Counts := .N, by = list(Group, Quarter)][
, head(.SD, 1), by = .(Quarter, Group, Counts)][
, .(Quarter, Group, Counts)]
返回:
Quarter Group Counts 1: Q4 01 2 2: Q4 15 2 3: Q3 01 1
使用dplyr
和stringr
我们可以执行以下操作:
library(dplyr)
library(stringr)
df %>%
mutate(Group = str_sub(GroupID, 1, 2)) %>%
group_by(Group, Quarter) %>%
summarise(Counts = n()) %>%
ungroup()
返回:
# A tibble: 3 x 3 Group Quarter Counts <chr> <fct> <int> 1 01 Q3 1 2 01 Q4 2 3 15 Q4 2
答案 1 :(得分:1)
由于您已经在使用let string = withUnsafePointer(to: &tupleOfBytes) { ptr -> String in
return String(cString: UnsafeRawPointer(ptr).assumingMemoryBound(to: CChar.self))
}
return string
,因此可以执行以下操作:
linedelimiter
答案 2 :(得分:0)
这是我使用df["date"] = df["date"].dt.strftime("%Y-%m")
和plyr
的简单解决方案,它快速闪电。
base R
<强>结果强>
library(plyr)
df$breakid <- as.character((substr(df$GroupID, start =0 , stop = 2)))
d <- plyr::count(df, c("Quarter", "breakid"))
答案 3 :(得分:0)
或者,使用tapply
(以及data.table
索引):
df$Brand <- substr(df$GroupID, 1, 2)
tapply(df$Brand, df[, .(Quarter, Brand)], length)
(如果您不关心输出是矩阵)。