Имам следния кадър с данни, наречете го 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
}
но получих грешка: "Грешка в match(x, table, nomatch = 0L): 'match' изисква векторни аргументи"
Опитах същото с командата subset:
df_less<-subset(df, df$Name %in% names * df$Appearances/df$Name %in% names >= 3)
Но получавам същата грешка: „Грешка в match(x, table, nomatch = 0L): „match“ изисква векторни аргументи“
Имам много малък опит в работата с рамки за данни в r. Как мога да извърша тази операция? Всяка помощ се оценява високо.