计算每列的平均值并重塑

时间:2019-04-11 01:02:10

标签: r dataframe

我有一个ID为229的学生的csv数据集,其中:

StudID            Score            Weight
 229                65               51
 229                45               43
 229                82               79

我将计算出学生的得分和体重的平均值,我想从中获得以下信息:

Measurements   Mean Value   #Measurements and mean value are new column names

Score          64         #score and weight which used to be column names are now under measurements
Weight         57.67

所以我到目前为止所做的如下:

stud_data <- read.csv("student_weight.csv")
stud_mean <- colMeans(stud_data[2:3])    #finding the mean of only score and weight

当我打印stud_mean时,会显示以下内容:

Score               Weight
 64                  57.67

是否可以用我将要获得的格式来格式化输出:

Measurements        Mean Value          #Measurements and Mean value are new column names

   Score                64
   Weight               57.67

3 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解您要执行的操作。您是否在询问如何一次汇总多个列?还是这与如何重塑汇总数据有关?

关于前者,您可以在基数R中完成

aggregate(cbind(Score, Weight) ~ StudID, df, FUN = mean)
#  StudID Score   Weight
#1    229    64 57.66667

关于后者,您可以使用stack重塑

stack(aggregate(cbind(Score, Weight) ~ StudID, df, FUN = mean))
#     values    ind
#1 229.00000 StudID
#2  64.00000  Score
#3  57.66667 Weight

在这里,我假设您的实际数据包含多个StudID的数据,因此您可能希望按StudID汇总数据。


样本数据

df <- read.table(text =
    "StudID            Score            Weight
 229                65               51
 229                45               43
 229                82               79", header = T)

答案 1 :(得分:1)

这基本上是一个很短的广到长问题,最简单的方法是使用 if not found_username: print("Username and or password do not exist!") count += 1 if count == 3: print("Attempts exceeded") else: break

tidyr::gather

答案 2 :(得分:1)

您可以在stack之后使用colMeans

stack(colMeans(df[2:3]))
#  values    ind
#1 64.00000  Score
#2 57.66667 Weight

要分配列名,我们可以使用setNames

setNames(stack(colMeans(df[2:3])), c("Mean_Value", "Measurements"))

#    Mean_Value  Measurements
#1     64.00000        Score
#2     57.66667        Weight