Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将重复值分组为单个值,并在R中提取与该列值关联的值?_R_Dataframe_Group By_Subset - Fatal编程技术网

如何将重复值分组为单个值,并在R中提取与该列值关联的值?

如何将重复值分组为单个值,并在R中提取与该列值关联的值?,r,dataframe,group-by,subset,R,Dataframe,Group By,Subset,我有一个数据框,看起来是这样的: df <- data.frame( Location = c("buildinga", "buildinga", "buildinga", "buildingb", "buildingb", "buildingb", "buildingc", "buildingc", "buildingc), Category = c(candy, candy, snacks, candy, snacks, soda, soda, candy, soda)

我有一个数据框,看起来是这样的:


df <- data.frame(
  Location = c("buildinga", "buildinga", "buildinga", "buildingb", "buildingb", "buildingb", "buildingc", "buildingc", "buildingc),
  Category   = c(candy, candy, snacks, candy, snacks, soda, soda, candy, soda)
  Calories   = 200, 250, 150, 180, 200, 80, 140, 200, 210)
)


df使用
dplyr
,您可以
根据您的数据分组,并计算每个类别中的卡路里

库(dplyr)
df%>%
分组依据(地点、类别)%>%
总结(计数=总和(卡路里))
#一个tibble:7x3
#分组:地点[3]
位置类别计数
1号楼A candy 450
2楼A小吃150
3号楼B candy 180
4楼B小吃200
5楼B苏打80
6号楼C candy 200
7楼C苏打350
这就是你要找的吗

数据

您的数据示例存在一些输入错误问题,以下是我使用的示例:


df我们可以使用
base R
找到按其他列分组的“卡路里”的
总和

aggregate(Calories ~ ., df, FUN = sum)
#   Location Category Calories
#1 buildinga    candy      450
#2 buildingb    candy      180
#3 buildingc    candy      200
#4 buildinga   snacks      150
#5 buildingb   snacks      200
#6 buildingb     soda       80
#7 buildingc     soda      350
数据
df嗨,听起来你想要这样的东西:

df %>% group_by(Location, Category) %>% summarise(total_cal = sum(Calories))
这是长格式,我想你会选择宽格式

df %>% spread(key = Category, value = total_cal, fill = 0)

如果需要,也可以将其转置。

预期输出是什么。你的例子给了我错误。请修正它可能
df%>%group\u by(Location)%>%summary(count=n\u distinct(Category))
Perfect,而不是sum如果我想从所有产品中找到卡路里含量最高的产品,我会使用max吗?我的目标是按性能(最差/最好的性能、每栋建筑的成本等)对产品进行分组。@Dinho,当然,你可以用
max
替换
sum
如果你想要每组产品的最大值,你也可以通过做
summary(Count=sum(carries),max=max(carries))
来获得这两种产品。请参阅@akrun在他的回答中的评论,它将为您提供理想的输出完美,而不是总和如果我想从所有产品中找到热量最多的产品,我会使用max吗?我的目标是按性能(最差/最好的性能、每栋建筑的成本等)对产品进行分组。@Dinho如果你需要分组,那么,
cut
可能会更好
(df,ave(卡路里、位置、类别、乐趣=功能(x)cut(x,breaks=3,labels=c(“最差”、“中等”、“最佳”))
@Dinho或使用
dplyr
df%>%groupby(地点、类别)%%>%mutate(分组=削减(卡路里、休息=3,标签=c(“最差”、“中等”、“最佳”))
谢谢@akrun。你认为最糟糕、最温和、最好的因素是什么?另外,是否有一种方法可以将所有建筑a组合成一个建筑值?基本上,每个组(a、b或c)的多个建筑值表示楼层。如果我只需要建筑物的全局平均值、最大值和最小值(考虑每层),我将如何重新格式化df以获得该值?我似乎不明白。@Dinho你可以通过平均值、最大值、最小值的休息时间,即
df%>%groupby(地点、类别)%%>%mutate(group=cut(卡路里、休息时间=c(最小(卡路里)、平均(卡路里)、最大(卡路里)),labels=c(“最差”、“中等”、“最佳”)
df %>% spread(key = Category, value = total_cal, fill = 0)