Ich habe eine schwerwiegende Zeichenfolge, die Zahlen enthält. Einige dieser Zeichenfolge enthalten 2 Zahlen wie folgt aus:Extrahieren Sie den Mindestwert aus einer Zeichenfolge, wenn mehr als 1 Zahlen in dieser Zeichenfolge sind
library(tidyverse)
df1 <- data.frame(x ="Want to extract both values 7 + 8",
y = "var")
Ich interessiere mich für die kleinste Zahl aus dieser Zeichenfolge aber habe Probleme beim Extrahieren, weil ich in einer Liste-Spalte immer enden und nicht wirklich wissen, wie man Vorgehen. Mein idealer Ausgang wäre so etwas wie:
> df1
x y comp_num firstnum secondnum
1 Want to extract both values 7 + 8 var 7, 8 7 8
Hier ist, wie ich die Nummer am extrahieren:
df1$comp_num = regmatches(df1$x,gregexpr('[0-9]+',df1$x))
Aber dann habe mich mit einer Liste Spalte landen. Hier ist, was ich bisher versucht:
df1$unnestval <- tidyr::unnest(df1$comp_num)
df1$separ <- tidyr::separate(df1$comp_num)
df1$unlistval <- unlist(df1$comp_num)
Das Problem, das ich habe, ist, mit der Liste Spalte aber nur, weil das ist, wo mein Ansatz endete. Die zentrale Frage ist, wie man den Minimalwert aus einer Zeichenkette extrahiert, wenn mehr als 1 Zahlen in dieser Zeichenkette enthalten UND diese Zahlen als Spalte im Datenrahmen ausgeben.
'df1 $ comp_num = min (unlist (regmatches (df1 $ x, gregexpr ('[0-9] +', df1 $ x))) ' – HubertL
Fwiw, deine Verwendung von unnest ist falsch. Es benötigt zwei Argumente: sowohl den Datensatz als auch die Spalte, etwa wie 'tidyr :: unnest (df1, comp_num)' – Frank