计算特定行的平均值
Calculate the mean of specific rows
我有一个包含 10 行(样本)的数据,它们是 Class1
或 Class2
和列。
我想计算行的平均值 Class1
并将结果放在第 11 行并计算行的平均值 Class2
并将结果放在第 12 行。
数据:
Name ClassType Col1 Col2 Col3
A Class1 10 50 12
B Class2 7 20 12
C Class1 8 12 8
D Class1 9 14 17
E Class2 3 15 14
F Class2 10 15 16
G Class2 12 22 15
H Class1 10 28 10
我想要的结果:
Name ClassType Col1 Col2 Col3
A Class1 10 50 12
B Class2 7 20 12
C Class1 8 12 8
D Class1 9 14 17
E Class2 3 15 14
F Class2 10 15 16
G Class2 12 22 15
H Class1 10 28 10
Mean class1 NA 9.25 26 11.75
Mean class2 NA 8 18 14.25
试试这个
library(dplyr)
calc_cols <- your_dataframe %>% group_by(ClassType) %>%
summarise( Col1 = mean(Col1),
Col2 = mean(Col2),
Col3 = mean(Col3)) %>%
mutate( ClassType = NA,
Name = c("Mean class1", "Mean class2"))
your_new_dataframe <- rbind(your_dataframe, calc_cols)
您可以跨列汇总。以@geometricfreedom 的回答为基础,方法如下(我仅使用前四行创建了您的数据集的迷你版本):
your_data <- data.frame(
Name = c("A", "B", "C", "D"),
ClassType = c("Class1", "Class2", "Class1", "Class1"),
Col1 = c(10, 7, 8, 9),
Col2 = c(50, 20, 12, 14),
Col3 = c(12, 12, 8, 17)
)
calc_cols <- your_data %>%
group_by(ClassType) %>%
summarize(
across(Col1:Col3, mean)
) %>%
mutate(ClassType = NA, Name = c("Mean Class 1", "Mean Class 2"))
your_data <- rbind(your_data, calc_cols)
your_data
这是另一个 tidyverse
选项,但在一个管道中完成所有操作。我们可以先按 ClassType
分组,然后 summarize
对以 Col
开头的任何列进行分组。此外,在 summarize
语句中,我们可以为底行创建您想要的其他名称(即 Mean Class 1
和 Mean Class 2
),而只是 return NA
对于 ClassType
。然后,我们可以使用 bind_rows
将原始输入数据帧绑定到上一步中的新输入数据帧(由 .
表示)。
df %>%
group_by(ClassType) %>%
summarize(Name = paste0("Mean ", unique(ClassType)),
across(starts_with("Col"), mean),
ClassType = NA) %>%
bind_rows(df, .)
输出
Name ClassType Col1 Col2 Col3
1 A Class1 10.00 50 12.00
2 B Class2 7.00 20 12.00
3 C Class1 8.00 12 8.00
4 D Class1 9.00 14 17.00
5 E Class2 3.00 15 14.00
6 F Class2 10.00 15 16.00
7 G Class2 12.00 22 15.00
8 H Class1 10.00 28 10.00
9 Mean Class1 <NA> 9.25 26 11.75
10 Mean Class2 <NA> 8.00 18 14.25
数据
df <- structure(
list(
Name = c("A", "B", "C", "D", "E", "F", "G", "H"),
ClassType = c(
"Class1",
"Class2",
"Class1",
"Class1",
"Class2",
"Class2",
"Class2",
"Class1"
),
Col1 = c(10L, 7L, 8L, 9L, 3L,
10L, 12L, 10L),
Col2 = c(50L, 20L, 12L, 14L, 15L, 15L, 22L, 28L),
Col3 = c(12L, 12L, 8L, 17L, 14L, 16L, 15L, 10L)
),
class = "data.frame",
row.names = c(NA,-8L)
)
试试这个!
import pandas as pd
mean_col1 = data[Col1].mean()
mean_col2 = data[Col2].mean()
data.loc[len(data.index)] = [None, mean_col1, mean_col2, None]
我有一个包含 10 行(样本)的数据,它们是 Class1
或 Class2
和列。
我想计算行的平均值 Class1
并将结果放在第 11 行并计算行的平均值 Class2
并将结果放在第 12 行。
数据:
Name ClassType Col1 Col2 Col3
A Class1 10 50 12
B Class2 7 20 12
C Class1 8 12 8
D Class1 9 14 17
E Class2 3 15 14
F Class2 10 15 16
G Class2 12 22 15
H Class1 10 28 10
我想要的结果:
Name ClassType Col1 Col2 Col3
A Class1 10 50 12
B Class2 7 20 12
C Class1 8 12 8
D Class1 9 14 17
E Class2 3 15 14
F Class2 10 15 16
G Class2 12 22 15
H Class1 10 28 10
Mean class1 NA 9.25 26 11.75
Mean class2 NA 8 18 14.25
试试这个
library(dplyr)
calc_cols <- your_dataframe %>% group_by(ClassType) %>%
summarise( Col1 = mean(Col1),
Col2 = mean(Col2),
Col3 = mean(Col3)) %>%
mutate( ClassType = NA,
Name = c("Mean class1", "Mean class2"))
your_new_dataframe <- rbind(your_dataframe, calc_cols)
您可以跨列汇总。以@geometricfreedom 的回答为基础,方法如下(我仅使用前四行创建了您的数据集的迷你版本):
your_data <- data.frame(
Name = c("A", "B", "C", "D"),
ClassType = c("Class1", "Class2", "Class1", "Class1"),
Col1 = c(10, 7, 8, 9),
Col2 = c(50, 20, 12, 14),
Col3 = c(12, 12, 8, 17)
)
calc_cols <- your_data %>%
group_by(ClassType) %>%
summarize(
across(Col1:Col3, mean)
) %>%
mutate(ClassType = NA, Name = c("Mean Class 1", "Mean Class 2"))
your_data <- rbind(your_data, calc_cols)
your_data
这是另一个 tidyverse
选项,但在一个管道中完成所有操作。我们可以先按 ClassType
分组,然后 summarize
对以 Col
开头的任何列进行分组。此外,在 summarize
语句中,我们可以为底行创建您想要的其他名称(即 Mean Class 1
和 Mean Class 2
),而只是 return NA
对于 ClassType
。然后,我们可以使用 bind_rows
将原始输入数据帧绑定到上一步中的新输入数据帧(由 .
表示)。
df %>%
group_by(ClassType) %>%
summarize(Name = paste0("Mean ", unique(ClassType)),
across(starts_with("Col"), mean),
ClassType = NA) %>%
bind_rows(df, .)
输出
Name ClassType Col1 Col2 Col3
1 A Class1 10.00 50 12.00
2 B Class2 7.00 20 12.00
3 C Class1 8.00 12 8.00
4 D Class1 9.00 14 17.00
5 E Class2 3.00 15 14.00
6 F Class2 10.00 15 16.00
7 G Class2 12.00 22 15.00
8 H Class1 10.00 28 10.00
9 Mean Class1 <NA> 9.25 26 11.75
10 Mean Class2 <NA> 8.00 18 14.25
数据
df <- structure(
list(
Name = c("A", "B", "C", "D", "E", "F", "G", "H"),
ClassType = c(
"Class1",
"Class2",
"Class1",
"Class1",
"Class2",
"Class2",
"Class2",
"Class1"
),
Col1 = c(10L, 7L, 8L, 9L, 3L,
10L, 12L, 10L),
Col2 = c(50L, 20L, 12L, 14L, 15L, 15L, 22L, 28L),
Col3 = c(12L, 12L, 8L, 17L, 14L, 16L, 15L, 10L)
),
class = "data.frame",
row.names = c(NA,-8L)
)
试试这个!
import pandas as pd
mean_col1 = data[Col1].mean()
mean_col2 = data[Col2].mean()
data.loc[len(data.index)] = [None, mean_col1, mean_col2, None]