Суммирование столбцов и строк фреймов данных

#r #dataframe

#r #фрейм данных

Вопрос:

У меня есть приведенный ниже data.frame, и я хотел бы определить позицию самого высокого значения, а также индекс. Например, давайте рассмотрим приведенный ниже data.farme.

  index t1 t2 t3 t4
   10  1  4  7 10
   20  2  5  8 11
   30  3  6  9  0
   40  0  0  0  0 
  

В first step, я хотел бы сложить строки data.frame.

 index    t1 t2 t3 t4
  100    6  12 24 21
  

В second step я хотел бы выбрать позицию (t) с наибольшим значением. В этом случае это будет t3 с наибольшим значением 24.

На третьем шаге я хотел бы добавить столбцы t1-t4 и определить индекс с наибольшим значением. В этом случае это будет индекс 20 (наибольшее значение 26).

 index t
10    22
20    26
30    18
40    0
  

Пример данных:

 df<-structure(list(index=c (10,20,30,40), 
                   t1 = c(1, 2, 3, 0), 
                   t2 = c(4, 5, 6, 0), 
                   t3 = c(7, 8,9,  0),
                   t4 = c(10, 11, 0, 0)), row.names = c(NA,4L), class = "data.frame")
                                                            
df
  

Ответ №1:

В базе R это можно сделать с помощью rowSums и colSums .

 #Column-wise sum
df1 <- colSums(df)
df1
#index    t1    t2    t3    t4 
#  100     6    15    24    21 

#Column name of highest value
highest_col <- names(df)[-1][which.max(df1[-1])]
highest_col
#[1] "t3"

#row-wise sum
df2 <- rowSums(df[-1])
df2
# 1  2  3  4 
#22 26 18  0 
#Corresponding index of highest row sum
highest_row_index <- df$index[which.max(df2)]
highest_row_index
#[1] 20
  

Ответ №2:

По столбцам:

 df <- setDT(df)
df_c <- df[,t:=t1 t2 t3 t4][, .(index, t)]
df_c[, .(index = index[which.max(t)], t = max(t))]
  

По строкам:

 df_r <- df[, .(index = sum(index),
               t1 = sum(t1),
               t2 = sum(t2),
               t3 = sum(t3),
               t4 = sum(t4))]
  

Ответ №3:

Использование dplyr

Сумма столбцов :

 df %>%
 summarise_all(sum)
  

выберите наибольшее значение после суммирования:

 df %>%
 summarise_all(sum) %>%
 select(-index) %>%
 max()
  

суммируем t1-t4 и выбираем строку с наибольшим значением:

 df %>%
  mutate(t = rowSums(.[2:5])) %>%
  select(index,t) %>%
  filter(t == max(t))