对于包含名称(属于目标组)以及特定年份(位于另一列中)的所有行,我将如何对一列的值求和?
示例:我想对2015年的a,b,c值求和,以创建一个新的类别“ e”,并在2016年进行相同的操作。
Year Category Value
2015 a 2
2015 b 3
2015 c 2
2015 d 1
2016 a 7
2016 b 2
2016 c 1
2016 d 1
要给出类似的内容:
Year Category Value
2015 d 1
2015 e 7
2016 d 1
2016 e 10
谢谢!
答案 0 :(得分:1)
尝试 SELECT * FROM user_log
WHERE user_id = 123
AND log_comment = "The one I want"
AND NOT log_comment = "The one I don't want"
,首先定义一组类别。
class ListCategoriesView(generics.ListAPIView):
serializer_class = CategorySerializer
queryset = Category.objects.all()
def list(self, request, *args, **kwargs)
token = request.META.get("HTTP_TOKEN","")
if not token:
""" do some action here """
elif not UserAccess.objects.filter(accessToken=token).exists():
""" do some action here """
else:
return super().list(request, *args, **kwargs)
编辑。
如果您有许多类别,并且希望折叠其中一些类别,而其他类别保持原样,则CRAN包forcats函数aggregate
是实现此目的的好方法。
target <- c("a", "b", "c")
group <- factor(dat$Category %in% target,
levels = c(TRUE, FALSE),
labels = c("e", "d"))
agg <- aggregate(Value ~ group + Year, dat, sum)[c(2, 1, 3)]
agg
# Year group Value
#1 2015 e 7
#2 2015 d 1
#3 2016 e 10
#4 2016 d 1
然后如上fct_collapse
。
数据。
group <- forcats::fct_collapse(dat$Category,
"e" = target)
group
#[1] e e e d e e e d
#Levels: e d
答案 1 :(得分:1)
这是一个更紧凑的dplyr
选项
dat %>%
mutate(Category = ifelse(Category %in% c("a", "b", "c"), "e", # put in c() the Categories you want to sum
as.character(Category))) %>%
group_by(Year, Category) %>%
summarise(Value = sum(Value))
# A tibble: 4 x 3
# Groups: Year [?]
Year Category Value
<int> <chr> <int>
1 2015 d 1
2 2015 e 7
3 2016 d 1
4 2016 e 10