R построчная запись населения на основе предыдущего ряда - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть фрейм данных R, который выглядит следующим образом:

Category Date        Column
Cat1     2018-03-23  19
Cat1     2018-03-24  19
Cat1     2018-03-25  19
Cat1     2018-03-26  NULL
Cat1     2018-03-27  NULL
...      ....        ...
Cat2     2018-03-23  25
Cat2     2018-03-24  25
Cat2     2018-03-25  25
Cat2     2018-03-26  NULL
Cat2     2018-03-27  NULL
...      ....        ...

и хочу заменить значения NULL на последнее число. Таким образом, для Cat1 значение NULL становится 19, а для Cat2 строк значение NULL становится 25. Как я могу добиться этого?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Ваш «NULL» здесь, очевидно, символ, а не специальное значение, поэтому вы можете преобразовать все «NULL» в NA, а затем использовать tidyr::fill(), как кто-то предложил?

df <- data.frame(
  Category = c("Cat1", "Cat1", "Cat1", "Cat1", "Cat2"),
  Date = c("2018-03-23", "2018-03-23", "2018-03-23", "2018-03-23", "2018-03-23"),
  Column = c(19, 19, 19, "NULL", 19),
  stringsAsFactors = F
)

# converts 'NULL' or anything to NA
df[df == "NULL"] <- NA

tidyr::fill(df, Column, .direction = "down")
1 голос
/ 06 февраля 2020

Может быть, вы можете попробовать базовый код R ниже, используя ave

df <- within(df, Column <- ave(Column, Category, FUN = function(x) ifelse(x=="NULL",tail(x[x!="NULL"],1),x)))

# > df
# Category       Date Column
# 1      Cat1 2018-03-23     19
# 2      Cat1 2018-03-24     19
# 3      Cat1 2018-03-25     19
# 4      Cat1 2018-03-26     19
# 5      Cat1 2018-03-27     19
# 6      Cat2 2018-03-23     25
# 7      Cat2 2018-03-24     25
# 8      Cat2 2018-03-25     25
# 9      Cat2 2018-03-26     25
# 10     Cat2 2018-03-27     25

ДАННЫЕ

df <- structure(list(Category = c("Cat1", "Cat1", "Cat1", "Cat1", "Cat1", 
"Cat2", "Cat2", "Cat2", "Cat2", "Cat2"), Date = c("2018-03-23", 
"2018-03-24", "2018-03-25", "2018-03-26", "2018-03-27", "2018-03-23", 
"2018-03-24", "2018-03-25", "2018-03-26", "2018-03-27"), Column = c("19", 
"19", "19", "19", "19", "25", "25", "25", "25", "25")), row.names = c(NA, 
-10L), class = "data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...