Слияние, когда один из столбцов является списком, создание нового столбца, который является списком

Если вы используете тег ввода, который этот код вам поможет. Я пишу этот код самостоятельно, и я думаю, что это очень хороший способ использования в качестве входных данных. но вы можете изменить его, используя свой формат. Это поможет пользователю исправить свой формат на входном теге.

$("#phone").on('input', function() {  //this is use for every time input change.
        var inputValue = getInputValue(); //get value from input and make it usefull number
        var length = inputValue.length; //get lenth of input

        if (inputValue < 1000)
        {
            inputValue = '1('+inputValue;
        }else if (inputValue < 1000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, length);
        }else if (inputValue < 10000000000) 
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, length);
        }else
        {
            inputValue = '1('+ inputValue.substring(0, 3) + ')' + inputValue.substring(3, 6) + '-' + inputValue.substring(6, 10);
        }       
        $("#phone").val(inputValue); //correct value entered to your input.
        inputValue = getInputValue();//get value again, becuase it changed, this one using for changing color of input border
       if ((inputValue > 2000000000) && (inputValue < 9999999999))
      {
          $("#phone").css("border","black solid 1px");//if it is valid phone number than border will be black.
      }else
      {
          $("#phone").css("border","red solid 1px");//if it is invalid phone number than border will be red.
      }
  });

    function getInputValue() {
         var inputValue = $("#phone").val().replace(/\D/g,'');  //remove all non numeric character
        if (inputValue.charAt(0) == 1) // if first character is 1 than remove it.
        {
            var inputValue = inputValue.substring(1, inputValue.length);
        }
        return inputValue;
}
1
задан Megan 18 March 2019 в 17:29
поделиться

3 ответа

Самый простой способ, который я могу придумать, - сначала вывести список детей, затем объединить, а затем снова перечислить:

mother1 <- mother_dt[,.(children=unlist(children)),by=mother]
mother1[child_dt,on=c(children='child')][,.(children=list(children),age=list(age)),by=mother]
0
ответ дан Rohit 18 March 2019 в 17:29
поделиться

Вы можете сделать что-то вроде этого -

  library(splitstackshape)
  newm <- mother_dt[,.(children=unlist(children)),by=mother]
  final_dt <- merge(newm,child_dt,by.x = "children",by.y = "child")

> aggregate(. ~ mother, data = cv, toString)
      mother         children     age
    1   Anya            Erika       9
    2  Penny Prudence, Violet   8, 10
    3    Sam  Jake, Red, Wolf 6, 2, 5
0
ответ дан Rushabh 18 March 2019 в 17:29
поделиться

Вы могли бы сделать это следующим образом, который имеет преимущество сохранения дубликатов в столбце mother, когда они существуют.

mother_dt$age <- lapply(
  mother_dt$children, 
  function(x,y) y[x], 
   y = setNames(child_dt$age, child_dt$child))

mother_dt
#    mother        children   age
# 1:  Penny Violet,Prudence 10, 8
# 2:   Anya           Erika     9
# 3:    Sam   Jake,Wolf,Red 6,5,2

Я хорошо перевожу в tidyverse синтаксис:

library(tidyverse)
mutate(mother_dt, age = map(children,~.y[.], deframe(child_dt)))
#   mother         children     age
# 1  Penny Violet, Prudence   10, 8
# 2   Anya            Erika       9
# 3    Sam  Jake, Wolf, Red 6, 5, 2
0
ответ дан Moody_Mudskipper 18 March 2019 в 17:29
поделиться
Другие вопросы по тегам:

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