Добавить инкрементный номер для указания c строки в столбце - PullRequest
2 голосов
/ 26 мая 2020

Я уверен, что это что-то базовое c, но я просто не могу найти подходящее решение. У меня есть большой df, который выглядит так:

Sample  cat
data1   124
data2   125
data3   126
Test1   Nice
Test2   Fluffy
Sample  Dog
data1   123
data2   124
data3   125
Test1   Good
Test2   Soft

Я хочу добавить инкрементные числа к Sample значениям в первом столбце, чтобы получить следующий результат:

Sample_1    cat
data1   124
data2   125
data3   126
Test1   Nice
Test2   Fluffy
Sample_2    Dog
data1   123
data2   124
data3   125
Test1   Good
Test2   Soft

Я пробовал различные комбинации gsub, grep, paste, paste0 и без всякой радости.

Пример

structure(list(V1 = c("Sample", "data1", "data2", "data3", "Test1", "Test2", "Sample", "data1", "data2", "data3", "Test1", "Test2"), V2 = structure(c(5L, 2L, 3L, 4L, 9L, 7L, 6L, 1L, 2L, 3L, 8L, 10L), .Label = c("123", "124", "125", "126", "cat", "Dog", "Fluffy", "Good", "Nice", "Soft"), class = "factor")), row.names = c(NA, -12L), class = "data.frame")

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Вы можете использовать cumsum, чтобы получить количество Samples и paste их, т.е.

d1$V1[d1$V1 == 'Sample'] <- paste0(d1$V1[d1$V1 == 'Sample'], '_', unique(cumsum(d1$V1 == 'Sample')))
0 голосов
/ 26 мая 2020

Примерно так должно работать ...

df2 <- df %>% 
  filter(str_detect(V1, "Sample")) %>% 
  mutate(V1 = ifelse(str_detect(V1, "Sample"), paste0("Sample_", row_number()), V1))

df <- df[-which(df$V1 == "Sample"),]


rbind(df2, df)

-Brennan

...