J'essaye de créer une boucle qui compte plusieurs motifs dans les rangées d'une trame de données et de rapporter le nombre d'occurrences dans une nouvelle trame de données.Boucler la trame de données pour rechercher plusieurs motifs et les signaler
Voici mon entrée:
input <- data.frame(V1 = LETTERS[1:4],
V2 = c("ABCDEF", "AAABBBCCA", "CCAABBCC", "ACCCCCCA"),
stringsAsFactors = FALSE)
Liste des modèles que je veux rechercher:
list<-c("ABC", "AA", "CC", "CCCC", "A")
Et attendu sortie:
structure(list(V1 = structure(1:4, .Label = c("A", "B", "C",
"D"), class = "factor"), V2 = structure(c(2L, 1L, 4L, 3L), .Label = c("AAABBBCCA",
"ABCDEF", "ACCCCCCA", "CCAABBCC"), class = "factor"), ABC = c(1L, 0L, 0L, 0L), AA = c(0L, 1L, 1L, 0L), CC = 0:3, CCCC = c(0L, 0L, 0L, 1L), A = c(1L, 4L, 2L, 1L), ABC_length = c(1L, 0L, 0L, 0L), AA_length = c(0L, 1L, 1L, 0L), CC_length = structure(1:4, .Label = c("0", "1", "1,1", "2"), class = "factor"), CCCC_length = c(0L, 0L, 0L, 1L), A_length = structure(c(1L, 4L, 3L, 2L), .Label = c("1", "1,1", "2", "3,1"), class = "factor")), .Names = c("V1", "V2", "ABC", "AA", "CC", "CCCC", "A", "ABC_length", "AA_length", "CC_length", "CCCC_length", "A_length"), class = "data.frame", row.names = c(NA, -4L))
Une solution pourrait utiliser str_count ou str_locate_all, exemple ci-dessous. Mais en réalité, je veux effectuer une recherche en utilisant la liste de motifs mentionnée ci-dessus.
library(stringr)
input$ABC <- str_count(input$ABC, "ABC")
input$ABC_length <- lapply(str_locate_all(input$ABC_length, "ABC"), function(x) {
paste(x[, 2] - x[, 1] + 1, collapse = ",")
})
juste pour le rendre clair, mon exemple inclut une solution comment trouver un modèle "ABC", mais la question est sur la recherche de plusieurs modèles – user2904120
Vous n'avez pas de solution pour trouver le modèle "ABC" parce que vous êtes se référant à une colonne que vous essayez de créer. – lebelinoz