В base R
это может быть сделано путем циклического перебора столбцов, замены нулей между ненулевыми значениями с разделителем ,
, считывания в data.frame (read.table
) и cbind
list
наборов данных
lst1 <- lapply(testdata, function(x) {
x1 <- read.table(text = sub("(?<=[1-9])0+", ",", x, perl = TRUE),
header = FALSE, sep=",", col.names = c('a', 'b'), fill = TRUE)
replace(x1, is.na(x1), 0)})
do.call(cbind, lst1)
# v11.a v11.b v12.a v12.b v13.a v13.b
#1 24 31 0 0 31 64
#2 31 28 0 0 18 58
Это также можно сделать с помощью tidyverse
, сначала gather
перейдя в «длинный» формат, затем выполнить ион separate
и, наконец, spread
] вернемся к «широкому» формату
library(tidyverse)
gather(testdata) %>%
separate(value, into = c('a', 'b'), sep=4, convert = TRUE) %>%
gather(key1, val, a:b) %>%
unite(key, key, key1, sep="_") %>%
group_by(key) %>%
mutate(ind = row_number()) %>%
spread(key, val) %>%
select(-ind)
# A tibble: 2 x 6
# v11_a v11_b v12_a v12_b v13_a v13_b
# <int> <int> <int> <int> <int> <int>
#1 24 31 0 0 31 64
#2 31 28 0 0 18 58
Или можно использовать summarise_all
с read.table
testdata %>%
summarise_all(funs(list(read.table(text =sub("^(....)", "\\1 ", .),
header = FALSE)))) %>%
unnest
Я закончил тем, что понял, что (краснеют) механизм, который использование JQuery найти строку в клонированной строке (для замены) является в основном regex. Таким образом я просто должен был выйти из квадратных скобок и период. После того как я сделал это, я смог, используют JQuery для создания формы как предложенного блога Phil Haack.
На мой следующий выпуск...!
Модель выезда, Связывающая Со Списком. Ваш Метод действия должен быть:
public ActionResult MyAction(string[] Amount, int[] Item){
// ...
}
Однако это сделает, необходимо "связать" объекты. Кроме того, создайте класс "Объекта":
public class Item {
public string Amount { get; set; }
public int Item { get; set; }
}
И
public ActionResult MyAction(IList<Item> items){
// ...
}
И Ваша разметка должна быть:
<input type="hidden" name="items.Index" value="0" />
<input type="text" name="items[0].Amount" id="items[0].Amount">
<select name="items[0].Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
<input type="hidden" name="items.Index" value="1" />
<input type="text" name="items[1].Amount" id="items[1].Amount">
<select name="items[1].Item">
<option value="1">Item 1"</option>
<option value="2">Item 2"</option>
<option value="3">Item 3"</option>
</select>
И т.д...
Я верю, есть ли у Вас несколько полей под названием Сумма, значения будут разграниченной запятой.
Для доступа к каждому, просто попробуйте:
string[] amounts = Request.Form["Amount"].Split(new char[] { ',' });
Следует иметь в виду, хотя, исходные данные не убраны на представлении поэтому, если кто-то вводит запятую в текстовое поле, это собирается вызвать проблемы.
Следовательно я рекомендовал бы нумеровать их.
Я пронумеровал бы их Amount1, Amount2, Amount3 и т.д.
Можно изменить идентификатор и назвать атрибут входа к чему-то вроде этого "Суммой [1]", "Сумма [2]", "Сумма [3]" (да, идентификатор и называют атрибут, может содержать специальные символы" [" или"]"). Затем в контроллере, запишите синтаксический анализатор параметра запроса HTTP для возвращения Сумм как наборов.