Как добавить вычисляемую строку на основе значений нескольких столбцов и строк в r в? - PullRequest
0 голосов
/ 02 марта 2019

Если у меня есть датафрейм ниже и я хочу добавить еще одну строку для каждой группы в r:

фрейм данных до:

Letter   Value
A         1
A         2
A         3
B         1
B         2
B         3

Если я просто хочу добавить еще одну строку для каждогогруппа, которая усреднила эти строки, как мне поступить:

датафрейм после:

Letter   Value
A         1
A         2
A         3
A         2
B         1
B         2
B         3
B         2

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Рассчитать среднее значение по письму, дающему ag, связать его до конца DF, дающему DF2, и отсортировать.

ag <- aggregate(value ~ letter, DF, mean)
DF2 <- rbind(DF, ag)

o <- order(DF2$letter, rownames(DF2))
DF2[o, ]

, дающему:

  letter value
1      A     1
2      A     2
3      A     3
7      A     2
4      B     1
5      B     2
6      B     3
8      B     2

Примечание

Ввод DF в воспроизводимом виде:

DF <- data.frame(letter = rep(c("A", "B"), each = 3), value = 1:3)
0 голосов
/ 02 марта 2019

Базовое решение R может быть

do.call(rbind, lapply(split(df, df$Letter),
    function(x) rbind(x, c(unique(x$Letter), mean(x$Value)))))
#    Letter Value
#A.1       A     1
#A.2       A     2
#A.3       A     3
#A.4       A     2
#B.4       B     1
#B.5       B     2
#B.6       B     3
#B.41      B     2

. Для этого требуется, чтобы столбец Letter был вектором character.Если Letter является factor, вы можете преобразовать из factor в character вектор

df$Letter <- as.character(df$Letter)

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

df <- read.table(text =
    "Letter   Value
A         1
A         2
A         3
B         1
B         2
B         3", header = T, stringsAsFactors = FALSE)
...