用NA重新排列列

时间:2018-10-13 11:00:16

标签: r

对不起,

这可能是一个愚蠢的问题,但我无法找到解决此问题的快速解决方案。

我有一个这种形式的数据框,指出了家庭成员的数量和每个成员的性别

router.get("/list-group", function(req, res) {
    sess = req.session;
    var response = {};
    if (sess.loginData) {
        var TableData = [];
        var i = {};
        var result = [];
        mongoOp.users_group.find({
            group_id: req.query.group_id
        }, function(e, d) {
            var len = d[0].assign_user_id.length;
            var assignuserid = d[0].assign_user_id;
            for (var i = 0; i < assignuserid.length; i++) {

                var assignid = assignuserid[i];
                mongoOp.users.find({
                    _id: assignid
                }, function(err, data) {

                    // This is result array 
                    result[i] = data;

                })

            }
            // And I want to print result array here
            console.log(result);

        });

    } else {
        response = {
            "error": true,
            "message": "Invalid Login"
        };
        res.json(response);
    }
})

我想通过以下方式仅在两列中收集此信息。

Familyid  Gender_1 Gender_2 Gender_3 Gender_4  Ncomponent
1         1        NA       NA       NA        1
2         NA       1        NA       NA        1
3         1        2        NA       NA        2
4         1        NA       2        NA        2
5         NA       1        2        NA        2
6         2        NA       NA       1         2

换句话说,我想创建一个列来指示成员1的性别,无论他/她位于我的原始数据框中是哪一列,并且要创建第二个家庭成员的性别(只要后者存在)就不同。

有人可以帮助我吗?

马可

1 个答案:

答案 0 :(得分:1)

我刚刚删除了NA列中的Gender_x个。

xy <- read.table(text = "Familyid  Gender_1 Gender_2 Gender_3 Gender_4  Ncomponent
1         1        NA       NA       NA        1
2         NA       1        NA       NA        1
3         1        2        NA       NA        2
4         1        NA       2        NA        2
5         NA       1        2        NA        2
6         2        NA       NA       1         2",
                 header = TRUE)
xy

fetch.gender <- grepl("^Gender_\\d{1}$", names(xy))
out <- apply(xy[, fetch.gender], MARGIN = 1, FUN = na.omit)
out <- do.call(rbind, out)
names(out) <- c("Gender_member1", "Gender_member2")

data.frame(Familyid = xy$Familyid, out, Ncomponent = xy$Ncomponent)

  Familyid Gender_1 Gender_2 Ncomponent
1        1        1        1          1
2        2        1        1          1
3        3        1        2          2
4        4        1        2          2
5        5        1        2          2
6        6        2        1          2