使用零填充数据框

时间:2018-05-13 18:08:53

标签: r dataframe dplyr

我有一个看起来像这样的数据框:

A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
    ...

我想为A中的每个l添加一行l i 0 {1,2,3,4}中的i,以便不存在l i k行。

对于这个例子,如果我考虑{1,2,3,4},结果将是

A    B    C
a    1    3
a    2    5
a    3    0
a    4    3
b    1    2
b    2    6
b    3    0
b    4    0
    ...

我觉得我可以使用包含1 2 3 4的数据框,并尝试使用full_join,但我不知道如何管理它。

如何获得此结果?

2 个答案:

答案 0 :(得分:3)

使用df %>% complete(B = full_seq(B, 1), A,fill=list(C=0))%>%arrange(A) # A tibble: 8 x 3 B A C <dbl> <chr> <dbl> 1 1 a 3 2 2 a 5 3 3 a 0 4 4 a 3 5 1 b 2 6 2 b 6 7 3 b 0 8 4 b 0

<?php
if(isset($_POST['ok1'])){
 $nomo = filter_input(INPUT_POST, 'nomo');
 $prenomo = filter_input(INPUT_POST, 'prenomo');
 $emailo = filter_input(INPUT_POST, 'emailo');
 $ageo = filter_input(INPUT_POST, 'ageo');
 $sexeo = filter_input(INPUT_POST, 'sexeo');
 $villeo = filter_input(INPUT_POST, 'villeo');
 $cpo = filter_input(INPUT_POST, 'cpo');
 if (!empty($nomo) && !empty($prenomo)  && !empty($emailo) && !empty($ageo) && !empty($sexeo) &&  !empty($villeo) && !empty($cpo)){

$host = "localhost";
$dbusername = "root";
$dbpassword = "";
$dbname = "srv_msn";

// Create connection
$conn = new mysqli ($host, $dbusername, $dbpassword, $dbname);

if (mysqli_connect_error()){
  die('Connect Error ('. mysqli_connect_errno() .') '
    . mysqli_connect_error());
}
else{
  $sql = "INSERT INTO personne  (CP, EMAIL, PRENOM, NOM)
  values ('$cpo','$emailo','$prenomo','$nomo')";
  if ($conn->query($sql)){
    echo "New record is inserted sucessfully";
  }
  else{
    echo "Error: ". $sql ."
". $conn->error;
  
  $conn->close();
}
}
}
else {
  echo "Password should not be empty";
  die();
}
 } 
 ?>

答案 1 :(得分:2)

您可以使用expand.grid枚举A列和B列的所有组合,然后使用sigdiff中的dplyr删除原始数据框中已存在的所有对,并添加零列。

library(dplyr)

D <- read.table(header=TRUE, text = "
A    B    C
a    1    3
a    2    5
a    4    3
b    1    2
b    2    6
")

expand.grid(A=unique(D$A), B=1:4) %>%
  setdiff(D[,1:2]) %>%
  mutate(C=0) %>%
  bind_rows(D) %>%
  arrange(A, B)

#>   A B C
#> 1 a 1 3
#> 2 a 2 5
#> 3 a 3 0
#> 4 a 4 3
#> 5 b 1 2
#> 6 b 2 6
#> 7 b 3 0
#> 8 b 4 0