将增量编号附加到列中的特定字符串上

问题描述 投票:1回答:2

我确信这是基本知识,但是我找不到适合的解决方案。我有一个大的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")
r paste gsub
2个回答
2
投票

您可以使用cumsum来获取Samplespaste的数量,即

d1$V1[d1$V1 == 'Sample'] <- paste0(d1$V1[d1$V1 == 'Sample'], '_', unique(cumsum(d1$V1 == 'Sample')))

0
投票

这样的事情应该起作用...

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)

-布伦南

© www.soinside.com 2019 - 2024. All rights reserved.