我有一个看起来像这样的数据框:
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,但我不知道如何管理它。
如何获得此结果?
答案 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