Представление элементов формы с тем же именем

В 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
10
задан doniyor 25 February 2014 в 05:07
поделиться

5 ответов

Я закончил тем, что понял, что (краснеют) механизм, который использование JQuery найти строку в клонированной строке (для замены) является в основном regex. Таким образом я просто должен был выйти из квадратных скобок и период. После того как я сделал это, я смог, используют JQuery для создания формы как предложенного блога Phil Haack.

На мой следующий выпуск...!

1
ответ дан 3 December 2019 в 14:54
поделиться

Модель выезда, Связывающая Со Списком. Ваш Метод действия должен быть:

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>

И т.д...

9
ответ дан 3 December 2019 в 14:54
поделиться

Я верю, есть ли у Вас несколько полей под названием Сумма, значения будут разграниченной запятой.

Для доступа к каждому, просто попробуйте:

string[] amounts = Request.Form["Amount"].Split(new char[] { ',' });

Следует иметь в виду, хотя, исходные данные не убраны на представлении поэтому, если кто-то вводит запятую в текстовое поле, это собирается вызвать проблемы.

Следовательно я рекомендовал бы нумеровать их.

6
ответ дан 3 December 2019 в 14:54
поделиться

Я пронумеровал бы их Amount1, Amount2, Amount3 и т.д.

0
ответ дан 3 December 2019 в 14:54
поделиться

Можно изменить идентификатор и назвать атрибут входа к чему-то вроде этого "Суммой [1]", "Сумма [2]", "Сумма [3]" (да, идентификатор и называют атрибут, может содержать специальные символы" [" или"]"). Затем в контроллере, запишите синтаксический анализатор параметра запроса HTTP для возвращения Сумм как наборов.

0
ответ дан 3 December 2019 в 14:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: