#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))