【问题标题】:recode many variables to create new dataframe in r重新编码许多变量以在 r 中创建新的数据框
【发布时间】:2013-09-20 01:26:01
【问题描述】:

我需要创建一个数据帧,其变量是另一个数据帧的重新编码值。

数据矩阵有一列由一组评分者和一名专家评分者评分的人。下面是数据结构的样子(这些只是虚构的值):

person <- c(1:10)
rater.1 <- c(2,3,2,3,4,3,4,2,3,3)
rater.2 <- c(4,3,2,3,1,2,3,2,3,1)
rater.3 <- c(3,2,3,1,2,2,2,3,1,2)
rater.4 <- c(3,4,3,4,3,4,2,2,3,2)
expert.rater <- c(4,4,2,3,1,2,1,2,2,2)

ratings <- data.frame(person,rater.1,rater.2, rater.3, rater.4, expert.rater)

除了我的真实数据集外,我有 131 名评估者和 400 人。

我需要将每个评分者与专家进行比较,并为不同的分数制作一个新的数据框。 我可以考虑这样做,但它非常乏味并且可能不是一个好主意:

rater.1_a <- abs(rater.1 - expert.rater)
rater.2_a <- abs(rater.2 - expert.rater)
rater.3_a <- abs(rater.3 - expert.rater)
rater.4_a <- abs(rater.4 - expert.rater)

difference <- data.frame(person,rater.1_a,rater.2_a, rater.3_a, rater.4_a)

有没有更快的方法来创建 131 个新的 rater.x_a 变量?

【问题讨论】:

    标签: r


    【解决方案1】:

    为什么不只是:

    abs(ratings[,2:5] - ratings[,6])
       rater.1 rater.2 rater.3 rater.4
    1        2       0       1       1
    2        1       1       2       0
    3        0       0       1       1
    4        0       0       2       1
    5        3       0       1       2
    6        1       0       0       2
    7        3       2       1       1
    8        0       0       1       0
    9        1       1       1       1
    10       1       1       0       0
    

    (如果你的数据很大,而且都是数字,使用矩阵而不是数据框可能会更快。)

    【讨论】:

      【解决方案2】:

      这将创建一个“差异分数”矩阵:

      > ToCalc = ratings[,grep("rater\\.", names(ratings))]
      > Result = apply(ToCalc, 2, function(X) abs(X - ratings$expert.rater))
      
                rater.1 rater.2 rater.3 rater.4
       [1,]       2       0       1       1
       [2,]       1       1       2       0
       [3,]       0       0       1       1
       [4,]       0       0       2       1
       [5,]       3       0       1       2
       [6,]       1       0       0       2
       [7,]       3       2       1       1
       [8,]       0       0       1       0
       [9,]       1       1       1       1
      [10,]       1       1       0       0
      

      然后将格式与第一帧匹配:

      Result = data.frame(person=ratings$person, Result, expert.rater=ratings$expert.rater)
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多