【问题标题】:Creating new variables describing the existing index position of a specific value创建描述特定值的现有索引位置的新变量
【发布时间】:2013-03-22 03:20:55
【问题描述】:

我在 R 中有一个数据框,其中有一列包含唯一 ID 和 10 个变量,如下所示:

    id V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1  555  2  1 10  3  8  9  5  7  4   6
2  681 10  5  4  8  7  3  6  2  9   1
3 2300  8  5 10  2  3  1  6  9  4   7

我想创建名为 or1or10 的变量,它们捕获每行值 1:10 的列位置。

因此,例如,在第一行中,数字 1 出现在名为 V2 的列中,因此 or1 = 2。如果我设法对上面的三行正确执行此操作,我会得到以下结果:

    id or1 or2 or3 or4 or5 or6 or7 or8 or9 or10
1  555  2   1   4   9   7  10   8   5   6    3
2  681 10   8   6   3   2   7   5   4   9    1
3 2300  6   4   5   9   2   7  10   1   8    3  

我设法使用一组荒谬的 if/then 语句创建了or1,但我知道有一种更好的方法可能涉及索引。非常感谢所有帮助。

【问题讨论】:

    标签: r indexing dataframe columnname


    【解决方案1】:

    这样做:

    > ord <- data.frame(id = dat$id, t(apply(dat[, -1], 1, order)))
        id X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
    1  555  2  1  4  9  7 10  8  5  6   3
    2  681 10  8  6  3  2  7  5  4  9   1
    3 2300  6  4  5  9  2  7 10  1  8   3
    

    (如果“id”不是第一列,我会将dat[, -1] 替换为更强大的dat[!colnames(dat) %in% "id"]

    然后,获得完全符合您要求的列名:

    colnames(ord) <- sub("^X", "or", colnames(ord))
    

    【讨论】:

    • 天哪,效率高!非常感谢弗洛德尔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 2017-09-10
    • 2013-09-08
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多