Заменить значения в R? - PullRequest
       2

Заменить значения в R?

0 голосов
/ 08 октября 2019

У меня есть набор данных с некоторыми более низкими значениями предела обнаружения (значения не согласованы), и я хочу заменить их на половину значения обнаружения. Я попытался использовать следующие коды r, но это не работает. кто-нибудь может помочь с этим?

dat %>% mutate(value=sub("<0.02500","0.0125",value))


Site    value
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  0.01
NR  0.01
NR  0.01
NR  0.02
NR  0.01
NR  0.01
NR  0.01
NR  0.01
NR  0.01
NR  <0.05100
NR  <0.05100
NR  <0.05100
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  0.02
NR  0.017
NR  0.031
NR  0.025
NR  0.023
NR  0.024
NR  0.023

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Мы можем использовать data.table:

library (data.table)

setDT(df1)[, value := ifelse(as.character(value)=="<0.02500", 
                             "0.0125", as.character(value)), ][]
#     Site    value
# 1:    NR   0.0125
# 2:    NR   0.0125
# 3:    NR   0.0125
# 4:    NR   0.0125
# 5:    NR   0.0125
# 6:    NR   0.0125
# 7:    NR     0.01
# ...
# 24:   NR <0.05000
# 25:   NR     0.02
# 26:   NR    0.017
# 27:   NR    0.031
# 28:   NR    0.025
# 29:   NR    0.023
# 30:   NR    0.024
# 31:   NR    0.023
#     Site    value
0 голосов
/ 08 октября 2019

Предполагая, что столбец value является символом (как в примечании в конце или, если не преобразует их первым), удалите символ <, преобразуйте его в числовое и умножьте каждое значение на 0,5 или 1.

library(dplyr)

dat %>% 
  mutate(value = as.numeric(sub("<", "", value)) * if_else(grepl("<", value), .5, 1))

или используя только основание R:

transform(dat, value = as.numeric(sub("<", "", value)) * ifelse(grepl("<", value), .5, 1))

Примечание

Lines <- "Site    value
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  <0.02500
NR  0.01
NR  0.01
NR  0.01
NR  0.02
NR  0.01
NR  0.01
NR  0.01
NR  0.01
NR  0.01
NR  <0.05100
NR  <0.05100
NR  <0.05100
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  <0.05000
NR  0.02
NR  0.017
NR  0.031
NR  0.025
NR  0.023
NR  0.024
NR  0.023"
dat <- read.table(text = Lines, header = TRUE, as.is = TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...