将许多列与一列数据进行比较,并创建一个0和1的新列

时间:2012-12-21 13:32:50

标签: r

任何人都可以提供帮助。我想比较多列的值和一列。如果任何列的值与标准列的值相比大于在新列中放置1,否则将为0。 我有很多文件,所以我想在循环中使用它。

df:
    Names   Standard    Das Dss Tri Tet
    Aa  32  42  21  45  34
    Ab  23  25  43  43  32
    Ac  43  34  23  32  23
    Ad  23  24  33  12  23
    Ae  14  24  12  20  24
    Af  43  42  13  12  43
    Ag  12  13  22  13  22
    Ah  32  32  42  42  23

输出:

 Names  Standard    Das Dss Tri Tet Difference  No_Difference   Names_Difference    Total
Aa  32  42  21  45  34  15  3   Das, Tri, Tet   1
Ab  23  25  43  43  32  52  4   Das,Dss,Tri,Tet 1
Ac  43  34  23  32  23  0   0   NA  0
Ad  23  24  33  12  23  10  2   Das,Dss 1
Ae  14  24  12  20  24  26  4   Das,Tri,Tet 1
Af  43  42  13  12  43  0   0   NA  0
Ag  12  13  22  13  22  22  4   Das,Dss,Tri,Tet 1
Ah  32  32  42  42  23  20  2   Dss,Tri 1

我正在使用@adibender提供的代码:

df2 <- do.call(rbind, apply(df[, -1], 1, function(z) {
        ind <- z[2:5] > z[1]
        return(cbind.data.frame( Total= if(z[2:5]>z[1]{'1'} else {'0'},
                        Difference = sum(z[2:5][ind] - z[1]), 
                        No_Difference = sum(ind), 
                        Names_Difference = paste(colnames(df[3:6])[ind], 
                                collapse = ", ")
                ))
    }))

df <- cbind(df, df2)

1 个答案:

答案 0 :(得分:1)

我不确定你要查找的是什么,但是以下命令会在数据框中添加一个新列Total,指示行中的任何值是否高于{{1}中的值}:

Standard

然后结果:

transform(df, Total = as.integer(apply(df[-(1:2)], 1, max) > Standard))