У меня есть следующий фрейм данных, назовите его df, который представляет собой фрейм данных, состоящий из трех векторов: «Сцена», «Имя» и «Внешний вид». Я хотел бы суммировать значение «Внешний вид» для каждого экземпляра, в котором «Имя» находится в списке, и разделить его на количество раз, когда имя появляется в списке. Затем я хочу удалить из df все строки, в которых это общее число (общее количество появлений, деленное на количество раз, когда имя находится в списке) меньше 2.
Так, например, здесь, в df, будут отброшены все строки, кроме строк Джона и Гитлера, значения которых вычисляются как (2+2)/2=2 и (4+1/2)=2,5.
Scene Name Appearances
112 Hamlet 1
113 Zyklon 1
114 Hitler 4
115 Chamberlain 1
115 Hitler 1
117 Gospel 1
117 John 2
117 Deussen 1
118 Plato 1
118 John 2
118 Hegel 1
119 Cankara 1
120 Freud 1
121 Freud 1
122 Petersbourg 1
Я пробовал пару вещей, вместо этого с некоторым умножением, но они оба математически неверны и возвращают ошибки.
Во-первых, я попытался превратить df в двустороннюю таблицу и удалить записи, принадлежащие редкому имени:
removeinfreqs <- function(df){
x <- table(df$Name, df$Appearances)
d<-df[(df$Name %in% names * df$Appearances)/df$Name %in% names(x[x >= 3]), ]
d
}
но я получил ошибку: «Ошибка в совпадении (x, таблица, nomatch = 0L):« совпадение »требует векторных аргументов»
Я пробовал то же самое с командой подмножества:
df_less<-subset(df, df$Name %in% names * df$Appearances/df$Name %in% names >= 3)
Но я получаю ту же ошибку: «Ошибка в совпадении (x, таблица, nomatch = 0L):« совпадение »требует векторных аргументов»
У меня очень мало опыта работы с фреймами данных в r. Как я могу выполнить эту операцию? Любая помощь очень ценится.