Вот лучшее решение для этой проблемы: В представлении добавьте все ID (Ключи). Рассмотрим несколько таблиц с именем (Первый, Второй и Третий)
@Html.HiddenFor(model=>model.FirstID)
@Html.HiddenFor(model=>model.SecondID)
@Html.HiddenFor(model=>model.Second.SecondID)
@Html.HiddenFor(model=>model.Second.ThirdID)
@Html.HiddenFor(model=>model.Second.Third.ThirdID)
В коде C #,
[HttpPost]
public ActionResult Edit(First first)
{
if (ModelState.Isvalid)
{
if (first.FirstID > 0)
{
datacontext.Entry(first).State = EntityState.Modified;
datacontext.Entry(first.Second).State = EntityState.Modified;
datacontext.Entry(first.Second.Third).State = EntityState.Modified;
}
else
{
datacontext.First.Add(first);
}
datacontext.SaveChanges();
Return RedirectToAction("Index");
}
return View(first);
}
Я хочу извлечь из третьего символа в векторе выше (в частности, извлечь число)
blockquote>Я бы использовал
gsub()
, который находит определенный шаблон и заменяет его.Variables <- c("EA10", "EA14", "EA15") gsub(pattern="\\D", replacement="", Variables) #[1] "10" "14" "15"
pattern="\\D"
соответствует каждому, что не является цифрой (больше здесь )
replacement=""
заменяет его на пустое пространство
В качестве альтернативы вы, конечно, можете извлечь непосредственно цифры, используя, например,
str_extract()
из пакетаstringr
:stringr::str_extract(string = Variables, pattern = "\\d+") # \\d+ matches multiple digits in the string #[1] "10" "14" "15"
Внутри
data.frame
:df["Variable"] = gsub(pattern="\\D", replacement="", df["Variable"])
или:
df["Variable"] = stringr::str_extract(df["Variable"], pattern="\\d+")