Как условно определить значение id итеративно в dataframe - PullRequest
1 голос
/ 05 октября 2019

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

Данные, которые я на самом деле использую, представляют собой цикл загрузки различных файлов Excel в каталог с использованием ldply(myfiles, function(x) read_excel(x, col_names = FALSE, range = "sheetname!A1:F22")). Ниже приведен упрощенный вариант этой проблемы.

#Creating dataset
id<- c('1', '2', '3')
first_name= c("Name", "John", "Sue", "Bob", "Name", "Erin", "Becky", "Name", "Robert")
value= c(NA, 60, 0, 100, NA, 29, 49, NA, 5)
df<- data.frame(first_name, value)
df

  first_name value
1       Name    NA
2       John    60
3        Sue     0
4        Bob   100
5       Name    NA
6       Erin    29
7      Becky    49
8       Name    NA
9     Robert     5

Я хотел бы использовать список, id, чтобы создать новый столбец на основе первого вхождения условия df[first_name == 'Name']. Таким образом, строки 1: 4 должны быть на 1 ниже до второго появления условия df[first_name == 'Name'], где id будет 2 и так далее.

  first_name value id
1       Name    NA  1
2       John    60  1
3        Sue     0  1
4        Bob   100  1
5       Name    NA  2
6       Erin    29  2
7      Becky    49  2
8       Name    NA  3
9     Robert     5  3

1 Ответ

0 голосов
/ 05 октября 2019

Мы можем использовать

library(dplyr)
df %>%
   mutate(id = cumsum(is.na(value)))
#   first_name value id
#1       Name    NA  1
#2       John    60  1
#3        Sue     0  1
#4        Bob   100  1
#5       Name    NA  2
#6       Erin    29  2
#7      Becky    49  2
#8       Name    NA  3
#9     Robert     5  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...