0

谁能帮忙。我想将多列的值与一列进行比较。如果任何一列的标准列值大于在新列中放入 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)
4

1 回答 1

1

我不确定您要查找的内容,但以下命令将Total在数据框中添加一个新列 , ,指示该行中的任何值是否高于 中的值Standard

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

然后结果:

  Names Standard Das Dss Tri Tet Total
1    Aa       32  42  21  45  34     1
2    Ab       23  25  43  43  32     1
3    Ac       43  34  23  32  23     0
4    Ad       23  24  33  12  23     1
5    Ae       14  24  12  20  24     1
6    Af       43  42  13  12  43     0
7    Ag       12  13  22  13  22     1
8    Ah       32  32  42  42  23     1
于 2012-12-21T13:43:55.813 回答