Eu tenho esse quadro de dados,
set.seed(124)
id <- rnorm(5, mean = 100, sd = 59)
charVar <- c("Eeny (2), meeny (10), miny (21), moe (1)",
"Catch (112), a (2), tiger (33), by (44), the (2), toe (24)",
NA,
"If (2), he (33), hollers (15), let (66), him (1), go (55)",
"Eeny (224), meeny (44), miny (50), moe (76)")
df <- data.frame(id, charVar)
df
> df
id charVar
1 18.28083 Eeny (2), meeny (10), miny (21), moe (1)
2 102.26107 Catch (112), a (2), tiger (33), by (44), the (2), toe (24)
3 54.98122 <NA>
4 112.52606 If (2), he (33), hollers (15), let (66), him (1), go (55)
5 184.10674 Eeny (224), meeny (44), miny (50), moe (76)
Quero classificar cada elemento nas linhas pelos números com ele. A saída esperada deve ser parecida com esta:
> df
id charVar
1 18.28083 miny (21), meeny (10), Eeny (2), moe (1)
2 102.26107 Catch (112), by (44), tiger (33), toe (24), a (2), the (2)
3 54.98122 <NA>
4 112.52606 let (66), go (55), he (33), hollers (15), If (2), him (1)
5 184.10674 Eeny (224), moe (76), miny (50), meeny (44)
Alguma ideia de como atingir o resultado esperado? Qualquer ajuda seria muito apreciada.
Parece que isso é uma continuação da sua pergunta anterior . Em vez de lidar com o problema XY , evite o problema desde o início:
Como você marcou tidyverse e data.table, aqui estão algumas abordagens usando ambos.
tidyverse
abordagemBasicamente, entramos em uma lista-coluna onde cada elemento é um vetor de caracteres, em formato longo, extraímos os números e então voltamos para uma linha por id, onde juntamos os valores em ordem decrescente :
strsplit()
charVar
tidyr::unnest()
dplyr::summarise()
paste()
order()
data.table
abordagemNão há equivalente para
tidyr::unnest()
. Embora os mesmos resultados possam ser alcançados com a não listagem, aqui está uma abordagem que parece mais idiomática, que modificacharVar
no local: