我有数据框
ID type Count Out
1 A 1 11
2 A 2 12
2 B 5 10
3 B 3 10
3 B 5 7
3 C 1 5
预期结果为
ID type Count(sum) Out (sum)
1 A 1 11
2 AB 7 22
3 BBC 9 22
我正在尝试聚合函数,但是没有类型列就可以实现结果表。
我想知道是否有一种方法可以保留预期结果表中显示的字符。
ID <- c(1,2,2,3,3,3)
type <- c("A","A","B", "B", "B","C")
Count <- c( 1,2,5,3,5,1)
out <- c(11,12,10,12,7,5)
x <- as.data.frame(cbind(ID,Count,out))
result <- aggregate(x, list(x$ID), sum_col)
答案 0 :(得分:0)
您可以在C#中使用Linq来实现您正在描述的操作。我构建了以下Linq查询,以显示此操作。它在第二列中保持顺序,因为内部使用的是就地算法。主要是我使用了GroupBy
Linq运算符以及String.Join
和Sum
聚合函数来解决问题。
void Main()
{
var data = new[] {
new { Id = 1, Type = "A", Count = 1, Out = 11 },
new { Id = 2, Type = "A", Count = 2, Out = 12 },
new { Id = 2, Type = "B", Count = 5, Out = 10 },
new { Id = 3, Type = "B", Count = 3, Out = 10 },
new { Id = 3, Type = "B", Count = 5, Out = 7 },
new { Id = 3, Type = "C", Count = 1, Out = 5 },
};
var result = data
.GroupBy(d => d.Id)
.Select(g => new
{
Ids = g.Key,
Types = String.Join(String.Empty, g.Select(x => x.Type).ToArray()),
Counts = g.Sum(d => d.Count),
Outs = g.Sum(d => d.Out)
})
.ToList();
result.ForEach(r => Console.WriteLine($"{r.Ids} {r.Types} {r.Counts} {r.Outs}"));
}
这将返回以下内容:
1 A 1 11
2 AB 7 22
3 BBC 9 22