r удаляет выбросы из фрейма данных с двумя идентификаторами с помощью ddply - PullRequest
0 голосов
/ 08 июня 2018

Сначала я должен заявить, что я не очень опытен в языке R.У меня есть большой фрейм данных длинного формата, примером которого является df ниже, с 3 столбцами: Group, ID и dat.Я хотел бы удалить выбросы (или, скорее, заменить их средним значением) внутри каждого «идентификатора группы».

Group = c("1","1","2","2","3","3","1","1","2","2","3","3","1","1","2","2","3","3","1","1","2","2","3","3")
ID = c("Eb","Eb","Eb","Eb","Eb","Eb","Sd","Sd","Sd","Sd","Sd","Sd","Re","Re","Re","Re","Re","Re","Tf","Tf","Tf","Tf","Tf","Tf")
dat = c(2,3,4,5,6,7,8,9,1010,11,12,13,1,2,3,-10000,5,6,4,3,2,7,6666,5)
df = data.frame(Group,ID,dat)

Мой базовый подход (который НЕ работает) был следующим (я пробовал несколькоитерации этого кода):

library(outliers)
library(plyr)
# Function to remove outliers
RmOurliFUN = function(x){
                rm.outlier(x$dat, fill = TRUE)
}
# splitting data based on first Group, and then ID to apply the outlier removal
GroupSplit = function(x){ddply(x,"ID",RmOurliFUN)}
df2 = ddply(df1, "Group", GroupSplit)

Я получаю различные сообщения об ошибках, но обычно аргумент не является числовым или логическим.Я почти уверен, что не правильно вызываю столбец dat во вложенной> вложенной функции.Как выполнить такую ​​операцию?Я открыт для любых предложений.

1 Ответ

0 голосов
/ 09 июня 2018

Чтобы удалить выбросы в каждой уникальной комбинации Group+ID, вы можете добавить функцию непосредственно в вызов к ddply и затем изменить результаты

library(outliers)
library(plyr)
library(reshape2)

#Make some new categories to have enough values for outlier detection
Group<-rep(c("a", "b"), each=12)
ID<-rep(c("c", "d"), each=6)
dat = c(2,3,4,5,6,7,8,9,1010,11,12,13,1,2,3,-10000,5,6,4,3,2,7,6666,5)
df1 = data.frame(Group,ID,dat)

df2<-ddply(df1, c("Group", "ID"), function(x) rm.outlier(x$dat, fill=TRUE))

#reshape and order the data
res<-melt(df2, id.vars=c("Group", "ID"), value.name = "dat")  
res<-arrange(res, Group, ID)[,-3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...