我有一个数据帧“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
答案 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