假设我们在R中拥有以下数据集:
我可以为您制作以下表格:
在这张表格中,数据按“类型”进行了总结。列“MinValue1”是特定类型的最小值,而列“MinValue2”是根据列“Value1”的最小值计算得出的“Value2”的最小值。列Mean*是所有观测值的平均值。
一种方法是实现循环,遍历每个类型并进行计算。然而,我正在寻找更好/更容易/更美观的方法来执行此操作。
我已经尝试使用“tidyverse”工具:
请注意,这里没有"MinValue2"列。另请注意,“summarise(..., MinValue2 = min(Value2),...)”无法工作,因为此解决方案取一个类型的所有观测值的最小值。
我们可以通过“slice”来操作,然后合并结果。
但需要注意的是,“切片”工具在这里没有帮助我们:“类型A,值1 5”应该有“值2”== 3,而不是像切片返回的那样等于4。那么,您们有什么优雅的方法来实现我想要的结果吗?谢谢!
> td
Type Rep Value1 Value2
1 A 1 7 1
2 A 2 5 4
3 A 3 5 3
4 A 4 8 2
5 B 1 5 10
6 B 2 6 1
7 B 3 7 1
8 C 1 8 13
9 C 2 8 13
> td <- structure(list(Type = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
3L, 3L), .Label = c("A", "B", "C"), class = "factor"), Rep = c(1L,
2L, 3L, 4L, 1L, 2L, 3L, 1L, 2L), Value1 = c(7L, 5L, 5L, 8L, 5L,
6L, 7L, 8L, 8L), Value2 = c(1L, 4L, 3L, 2L, 10L, 1L, 1L, 13L,
13L)), .Names = c("Type", "Rep", "Value1", "Value2"), class = "data.frame",
row.names = c(NA, -9L))
我可以为您制作以下表格:
表格如下:
Type MinValue1 MinValue2 MeanValue1 MeanValue2
1 A 5 3 6.25 2.5
2 B 5 10 6.00 4.0
3 C 3 13 8.00 13.0
在这张表格中,数据按“类型”进行了总结。列“MinValue1”是特定类型的最小值,而列“MinValue2”是根据列“Value1”的最小值计算得出的“Value2”的最小值。列Mean*是所有观测值的平均值。
一种方法是实现循环,遍历每个类型并进行计算。然而,我正在寻找更好/更容易/更美观的方法来执行此操作。
我已经尝试使用“tidyverse”工具:
> library(tidyverse)
> td %>%
group_by(Type) %>%
summarise(MinValue1 = min(Value1),
MeanValue1 = mean(Value1),
MeanValue2 = mean(Value2))
# A tibble: 3 × 4
Type MinValue1 MeanValue1 MeanValue2
<fctr> <int> <dbl> <dbl>
1 A 5 6.25 2.5
2 B 5 6.00 4.0
3 C 8 8.00 13.0
请注意,这里没有"MinValue2"列。另请注意,“summarise(..., MinValue2 = min(Value2),...)”无法工作,因为此解决方案取一个类型的所有观测值的最小值。
我们可以通过“slice”来操作,然后合并结果。
> td %>% group_by(Type) %>% slice(which.min(Value1))
Source: local data frame [3 x 4]
Groups: Type [3]
Type Rep Value1 Value2
<fctr> <int> <int> <int>
1 A 3 5 4
2 B 1 5 10
3 C 1 8 13
但需要注意的是,“切片”工具在这里没有帮助我们:“类型A,值1 5”应该有“值2”== 3,而不是像切片返回的那样等于4。那么,您们有什么优雅的方法来实现我想要的结果吗?谢谢!