Фрейм данных, очистка данных - PullRequest
2 голосов
/ 06 марта 2019

Мне было просто интересно, существует ли оптимальный способ решения следующей проблемы:

У меня довольно большая база данных ежедневных доходов для частных компаний.

dates  <- c("04.01.1995","05.01.1995","06.01.1995","09.01.1995","10.01.1995","11.01.1995","12.01.1995","13.01.1995")
stock1 <- rnorm(0.1,n = 3)
stock2 <- c(unlist(strsplit(rep("Na",8),split = " ")))
stock3 <- rnorm(0.1,n = 3)
stock4 <- rnorm(0.1,n = 3)
stock5 <- rnorm(0.1,n = 3)
stock6 <- rnorm(0.1,n = 3)
stock7 <- rnorm(0.1,n = 3)
stock8 <- c(unlist(strsplit(rep("Na",8),split = " ")))

cbind(dates,stock1,stock2,stock3,stock4,stock5,stock6,stock7,stock8)

Что выглядит примерно так:

dates         stock1   stock2  stock3      stock4               stock5....              
"04.01.1995" "1.8249" "Na"     "2.7125"    "0.557280737196038"  "1.38681707010098"  

Я хотел бы вычислить среднее значение для каждой конкретной строки, а затем удалить наблюдения / элементы в той же строке, под«среднее число строк» ​​или порог.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Я бы предложил использовать пакет dplyr. В интернете много знакомств, но лучше всего взять его прямо у Хэдли .

Ваши данные немного запутаны: было бы лучше иметь столбец для даты, столбец для номера запаса и столбец для значения. Этого легко достичь, используя функцию gather из пакета tidyr (как видно из названия, пакет, который специализируется на очистке грязных данных). Опять же, множество сетевых ресурсов .

Оттуда вы, вероятно, захотите group_by компания / акция и год, затем summarise, чтобы получить среднее значение по компании и за год, затем filter, чтобы оставить только те компании, которые соответствуют вашим критериям.

Надеюсь, у вас достаточно ключевых слов для более эффективного поиска!

1 голос
/ 06 марта 2019

Вы можете попробовать:

datos =data.frame(date=c('02/01/1995','2019-01-02','2019-01-03'),
                 stock.1=c(0.1,NA,6),
                 stock.2=c(NA,7,6),
                 stock.3=c(0.4,7,1),
                 stock.4=c(0.1,7,1),
                 stock.5=c(0.2,7,1),
                 stock.6=c(0.7,7,1),
                 stock.7=c(1.2,7,1)
                        )


result <- datos[!(datos$date == "02/01/1995" & datos$stock.1==0.1 &     datos$stock.2=="NA" & datos$stock.3==0.4 & datos$stock.4==0.1 & datos$stock.5==0.2 & 
datos$stock.6==0.7 & datos$stock.7==1.2),]

Вот результат:

        date stock.1 stock.2 stock.3 stock.4 stock.5 stock.6 stock.7
1 02/01/1995     0.1      NA     0.4     0.1     0.2     0.7     1.2
2 2019-01-02      NA       7     7.0     7.0     7.0     7.0     7.0
3 2019-01-03     6.0       6     1.0     1.0     1.0     1.0     1.0
> result <- datos[!(datos$date == "02/01/1995" & datos$stock.1==0.1 &     datos$stock.2=="NA" & datos$stock.3==0.4 & datos$stock.4==0.1 & datos$stock.5==0.2 &     datos$stock.6==0.7 & datos$stock.7==1.2),]
> result
         date stock.1 stock.2 stock.3 stock.4 stock.5 stock.6 stock.7
NA       <NA>      NA      NA      NA      NA      NA      NA      NA
2  2019-01-02      NA       7       7       7       7       7       7
3  2019-01-03       6       6       1       1       1       1       1

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...