【问题标题】:Create indicator from two groups [duplicate]从两组创建指标[重复]
【发布时间】:2016-06-29 17:09:39
【问题描述】:

我有这个数据框:

df<- data.frame(j = c("a", "a", "b", "b", "c", "c"), 
                t = c(2000,2010,2000,2010,2000,2010))
> df
        j    t
1       a 2000
2       a 2010
3       b 2000
4       b 2010
5       c 2000
6       c 2010

我正在尝试创建一个指标jt 来识别国家/地区:

        j    t  jt
1       a 2000  1
2       a 2010  2
3       b 2000  3
4       b 2010  4
5       c 2000  5
6       c 2010  6
7       c 2010  6
8       c 2010  6

最后两个观察表明我可以多次出现。

【问题讨论】:

    标签: r categories


    【解决方案1】:
    df<- data.frame(j = c("a", "a", "b", "b", "c", "c", "c", "c"), 
                    t = c(2000,2010,2000,2010,2000,2010,2010,2010))
    df$jt <- paste(df$j, df$t, sep="")
    df$jt <- as.factor(df$jt)
    str(df)
    

    这使得jt 成为每个独特组合的级别的因素。如果你真的希望它们是数字,你可以使用因子水平来强制它们:

    df$jt <- as.numeric(factor(df$jt, levels = unique(df$jt)))
    df
    

    【讨论】:

    • 有效。我更喜欢这个基本的 R 解决方案。
    【解决方案2】:

    我们可以使用paste'df'的行,并通过matching'v1'和unique的值得到数字索引。

     v1 <- do.call(paste0, df)
     df$jt <- match(v1, unique(v1))
    

    或者我们可以试试data.table。将'data.frame'转换为'data.table'(setDT(df)),按'j'和't'分组,我们得到.GRP并将其分配(:=)给'jt'。

    library(data.table)
    setDT(df)[, jt := .GRP ,.(j, t)]
    df
    #   j    t jt
    #1: a 2000  1
    #2: a 2010  2
    #3: b 2000  3
    #4: b 2010  4
    #5: c 2000  5
    #6: c 2010  6
    #7: c 2010  6
    #8: c 2010  6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2019-10-17
      • 2020-05-31
      • 2019-02-15
      • 1970-01-01
      • 2020-12-06
      • 2020-02-27
      相关资源
      最近更新 更多