下面我已经提到了R.
ID Date Type Value
K-1 2018-01-01 A 4
K-2 2018-01-01 B 7
K-3 2018-01-01 C 12
K-4 2018-01-02 A 6
K-5 2018-01-02 A 4
K-6 2018-01-02 B 15
K-7 2018-01-02 B 10我想学习如何转换下面给定的数据格式中的数据,其中A、B和C对于每个日期都应该是静态的,无论该特定类型在该日期是否可用。
此外,我希望按日期和Type来计算Type组,包括<5 (如果值在1-4之间)、5-10 (如果值在5-10之间)和>10 (如果值大于10)的桶中。
sum列也应该包含特定日期和类型的值总数。
Count列应由按特定日期计算的ID组和Type组成。
所需DF
Date Count <5 5-10 >10 sum
2018-01-01 3 1 1 1 23
A 1 1 0 0 4
B 1 0 1 0 7
C 1 0 0 1 12
2018-01-02 4 1 2 1 35
A 2 1 1 0 10
B 2 0 1 1 25
C 0 0 0 0 0我的代码:
Required_Output <- df1 %>%
group_by(Date, Type) %>%
dplyr::summarise(Count=n(),
A=sum(Type=='A'),
B=sum(Type=='B'),
C=sum(Type=='C')) %>%
ungroup() %>%
complete(Date, Type, fill=list(`Count`=0,A=0, B=0, C=0))上面的代码没有给我想要的输出:(
发布于 2019-04-05 11:15:55
有些步骤可以进一步简化,但以下工作如下。
library(tidyverse)
dat2 <- dat %>%
mutate(Result = case_when(
Value < 5 ~"<5",
Value >= 5 & Value <= 10 ~"5-10",
Value > 10 ~">10"
)) %>%
group_by(Date, Type, Result) %>%
summarize(sum = sum(Value)) %>%
mutate(Flag = 1L) %>%
spread(Result, Flag, fill = 0L) %>%
group_by(Date, Type) %>%
summarize_all(list(~sum(.))) %>%
ungroup() %>%
complete(Date, Type)
dat2[is.na(dat2)] <- 0
dat3 <- dat2 %>% mutate(Count = rowSums(select(., -Date, -Type, -sum)))
dat4 <- dat3 %>%
group_by(Date) %>%
summarize_at(vars(-Type), list(~sum(.)))
dat_final <- map2_dfr(split(dat4, f = dat4$Date),
split(dat3, f = dat3$Date),
~bind_rows(.x %>% rename(Type = Date),
.y %>% select(-Date)))
dat_final2 <- dat_final %>%
select(Date = Type, Count, `<5`, `5-10`, `>10`, sum)
dat_final2
# # A tibble: 8 x 6
# Date Count `<5` `5-10` `>10` sum
# <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 2018-01-01 3 1 1 1 23
# 2 A 1 1 0 0 4
# 3 B 1 0 1 0 7
# 4 C 1 0 0 1 12
# 5 2018-01-02 4 1 2 1 35
# 6 A 2 1 1 0 10
# 7 B 2 0 1 1 25
# 8 C 0 0 0 0 0数据
dat <- read.table(text = "ID Date Type Value
'K-1' '2018-01-01' A 4
'K-2' '2018-01-01' B 7
'K-3' '2018-01-01' C 12
'K-4' '2018-01-02' A 6
'K-5' '2018-01-02' A 4
'K-6' '2018-01-02' B 15
'K-7' '2018-01-02' B 10",
header = TRUE, stringsAsFactors = FALSE)https://stackoverflow.com/questions/55533632
复制相似问题