如何根据数据框中其他列中的值创建新列?

时间:2017-06-15 08:17:56

标签: r dataframe

我有一个数据帧“df”,如下所示。第一列是样品。我想根据其他列中的值创建一个新列。

Input:

Sample  Region4 Region1 Region5 Region3 Region2 Type
T1       0       0.289    0.378   0       1      K
T2       0       0.167     0     0.875  0.389    K
T3    0.186     0.12345    0      0     0.187    K
T4   0.11234     0.1789    0     0.457  0.786    L
T5    0.2347     0.2567    0      0       0      L
T6   0.28769       0     0.123   0.1987 0.1565   L
T7    0.142        0     0.1987   0       0      M
T8       0       0.1256  0.123   0.129   0.111   M
T9    0.187      0.987     0     0.237   0.783   M

在“新”栏中,如果样品在至少一个区域中显示值<0.2,则应分配“0”并且如果样品在至少一个中显示值> = 0.2,则应分配“2”的地区。它应该如下所示:

输出:

Sample  Region4 Region1 Region5 Region3 Region2 Type  New
T1       0       0.289    0.378   0       1      K     2
T2       0       0.167     0     0.875  0.389    K     2
T3    0.186     0.12345    0      0     0.187    K     0
T4   0.11234     0.1789    0     0.457  0.786    L     2
T5    0.2347     0.2567    0      0       0      L     2
T6   0.28769       0     0.123   0.1987 0.1565   L     2
T7    0.142        0     0.1987   0       0      M     0
T8       0       0.1256  0.123   0.129   0.111   M     0
T9    0.187      0.987     0     0.237   0.783   M     2

2 个答案:

答案 0 :(得分:1)

我们可以使用APP_NAME

以矢量化方式执行此操作
rowSums

nm1 <- startsWith(names(df1), "Region") df1$New <- c(0, 2)[(rowSums(df1[nm1] >=0.2) !=0)+1] df1$New #[1] 2 2 0 2 2 2 0 0 2

的其他选项
Reduce

答案 1 :(得分:0)

基本上我使用Add a variable to a data frame containing max value of each row获取每行的最大值,然后使用ifelse获取新列

        > so1=read.csv("so1.csv")
        > so1
           Sample Region4 Region1 Region5 Region3 Region2 Type
        1      T1 0.00000 0.28900  0.3780  0.0000  1.0000    K
        2      T2 0.00000 0.16700  0.0000  0.8750  0.3890    K
        3      T3 0.18600 0.12345  0.0000  0.0000  0.1870    K
        4      T4 0.11234 0.17890  0.0000  0.4570  0.7860    L
        5      T5 0.23470 0.25670  0.0000  0.0000  0.0000    L
        6      T6 0.28769 0.00000  0.1230  0.1987  0.1565    L
        7      T7 0.14200 0.00000  0.1987  0.0000  0.0000    M
        8      T8 0.00000 0.12560  0.1230  0.1290  0.1110    M
        9      T9 0.18700 0.98700  0.0000  0.2370  0.7830    M


    > so1$new1=do.call(pmax,so1[2:6])
    > so1
      Sample Region4 Region1 Region5 Region3 Region2 Type    new1
    1     T1 0.00000 0.28900  0.3780  0.0000  1.0000    K 1.00000
    2     T2 0.00000 0.16700  0.0000  0.8750  0.3890    K 0.87500
    3     T3 0.18600 0.12345  0.0000  0.0000  0.1870    K 0.18700
    4     T4 0.11234 0.17890  0.0000  0.4570  0.7860    L 0.78600
    5     T5 0.23470 0.25670  0.0000  0.0000  0.0000    L 0.25670
    6     T6 0.28769 0.00000  0.1230  0.1987  0.1565    L 0.28769
    7     T7 0.14200 0.00000  0.1987  0.0000  0.0000    M 0.19870
    8     T8 0.00000 0.12560  0.1230  0.1290  0.1110    M 0.12900
    9     T9 0.18700 0.98700  0.0000  0.2370  0.7830    M 0.98700

> so1$New=ifelse(so1$new1>=0.2,2,0)
> so1
  Sample Region4 Region1 Region5 Region3 Region2 Type    new1 New
1     T1 0.00000 0.28900  0.3780  0.0000  1.0000    K 1.00000   2
2     T2 0.00000 0.16700  0.0000  0.8750  0.3890    K 0.87500   2
3     T3 0.18600 0.12345  0.0000  0.0000  0.1870    K 0.18700   0
4     T4 0.11234 0.17890  0.0000  0.4570  0.7860    L 0.78600   2
5     T5 0.23470 0.25670  0.0000  0.0000  0.0000    L 0.25670   2
6     T6 0.28769 0.00000  0.1230  0.1987  0.1565    L 0.28769   2
7     T7 0.14200 0.00000  0.1987  0.0000  0.0000    M 0.19870   0
8     T8 0.00000 0.12560  0.1230  0.1290  0.1110    M 0.12900   0
9     T9 0.18700 0.98700  0.0000  0.2370  0.7830    M 0.98700   2
> so1$new1=NULL
> so1
  Sample Region4 Region1 Region5 Region3 Region2 Type New
1     T1 0.00000 0.28900  0.3780  0.0000  1.0000    K   2
2     T2 0.00000 0.16700  0.0000  0.8750  0.3890    K   2
3     T3 0.18600 0.12345  0.0000  0.0000  0.1870    K   0
4     T4 0.11234 0.17890  0.0000  0.4570  0.7860    L   2
5     T5 0.23470 0.25670  0.0000  0.0000  0.0000    L   2
6     T6 0.28769 0.00000  0.1230  0.1987  0.1565    L   2
7     T7 0.14200 0.00000  0.1987  0.0000  0.0000    M   0
8     T8 0.00000 0.12560  0.1230  0.1290  0.1110    M   0
9     T9 0.18700 0.98700  0.0000  0.2370  0.7830    M   2