Измените значение столбца, если оно соответствует одному из требований. БЕЗ использования циклов или операторов IF - PullRequest
0 голосов
/ 10 сентября 2018

Я хотел бы изменить значение столбца, если оно соответствует одному из требований. Фрейм данных:

> dat
             V1   V2       V3
1  0.0582597361   13   1.6147
2  0.0188402085   23   1.5917
3  0.0362384206   64   6.2791
4  0.0690792261  110  20.2906
5  0.0443102834   57  11.3775
6  0.0654932712  137  49.7685
7  0.0388503030    5   0.0397
8  0.0591058288   22   3.4062
9  0.0838927581  569 218.2068
10 0.0749128048   17   1.0305
11 0.0523715810   56   0.5930
12 0.0328815149    0   0.0092
13 0.0246113928 1327 201.1935
14 0.0595625342  181  76.8364
15 0.0879960297   25   4.2614
16 0.0388291615   22   4.3269
17 0.0746654630   40  19.3294
18 0.0003277829  140  43.4176
19 0.0624188329   22   4.0448
20 0.0417003184  157  28.4765

Я хочу изменить значения с V1 на 1, если оно соответствует одному из следующих требований:

dat$V3>dat$V2 or dat$V1<=0.05

Спасибо, без использования циклов или операторов IF.

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Использование ifelse:

dat$V1=ifelse(dat$V3>dat$V2 | dat$V1<=0.05,1,dat$V1)

Выход:

           V1   V2       V3
1  0.05825974   13   1.6147
2  1.00000000   23   1.5917
3  1.00000000   64   6.2791
4  0.06907923  110  20.2906
5  1.00000000   57  11.3775
6  0.06549327  137  49.7685
7  1.00000000    5   0.0397
8  0.05910583   22   3.4062
9  0.08389276  569 218.2068
10 0.07491280   17   1.0305
11 0.05237158   56   0.5930
12 1.00000000    0   0.0092
13 1.00000000 1327 201.1935
14 0.05956253  181  76.8364
15 0.08799603   25   4.2614
16 1.00000000   22   4.3269
17 0.07466546   40  19.3294
18 1.00000000  140  43.4176
19 0.06241883   22   4.0448
20 1.00000000  157  28.4765
0 голосов
/ 10 сентября 2018

Вы можете использовать ifelse, который не требует циклов

dat$V1 <- ifelse(dat$V3>dat$V2 | dat$V1<=0.05, 1, dat$V1)
0 голосов
/ 10 сентября 2018

В основном делайте это векторизованным способом, который работает быстрее:

dat$V1[ dat$V3>dat$V2 | dat$V1<=0.05]   <- 1

Выход:

> dat
           V1   V2       V3
1  0.05825974   13   1.6147
2  1.00000000   23   1.5917
3  1.00000000   64   6.2791
4  0.06907923  110  20.2906
5  1.00000000   57  11.3775
6  0.06549327  137  49.7685
7  1.00000000    5   0.0397
8  0.05910583   22   3.4062
9  0.08389276  569 218.2068
10 0.07491280   17   1.0305
11 0.05237158   56   0.5930
12 1.00000000    0   0.0092
13 1.00000000 1327 201.1935
14 0.05956253  181  76.8364
15 0.08799603   25   4.2614
16 1.00000000   22   4.3269
17 0.07466546   40  19.3294
18 1.00000000  140  43.4176
19 0.06241883   22   4.0448
20 1.00000000  157  28.4765

Отредактировано, спасибо за отзыв.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...