Исправить значения в нескольких колонках фрэйма

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Исправить значения в нескольких колонках фрэйма

Сообщение VistaSV30 » 13 июн 2020, 21:31

Добрый вечер!

Имеется data.frame

Код: Выделить всё

t1 <- sample(100, 10)
t2 <- sample(100, 10)

dt <- rbind(t1, t2)
Где-то видел, что в R можно исправить значения сразу в нескольких колонках.
Например, мне нужно проверить если в колонках с 5 по 8 есть значения больше 20 то исправить их на 20.

Спасибо!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Исправить значения в нескольких колонках фрэйма

Сообщение nickleb » 14 июн 2020, 10:04

По коду Вашему dt - матрица, поэтому самое место apply.
Если подробно и с проверкой, то:

Код: Выделить всё

class(dt)

is.matrix(dt)

dt[,5:8]

dt[,5:8] <- apply(X= dt[,5:8], 
                  MARGIN = c(1,2), 
                  FUN = function (z) {
                    ifelse(z > 20, 20, z)
                    }
                  )

dt[,5:8]

dt

nickleb
Гуру
Сообщения: 964
Зарегистрирован: 22 май 2010, 20:20
Репутация: 154

Re: Исправить значения в нескольких колонках фрэйма

Сообщение nickleb » 14 июн 2020, 10:40

... если же сделать-таки data.frame:

Код: Выделить всё

dt <- data.frame(rbind(t1, t2))
, то apply-код, что дан выше также не спотыкается, по-моему...

gamm
Гуру
Сообщения: 4059
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1055
Ваше звание: программист
Откуда: Казань

Re: Исправить значения в нескольких колонках фрэйма

Сообщение gamm » 14 июн 2020, 15:38

Код: Выделить всё

> m=matrix(1:12,ncol=4,nrow=3,byrow=TRUE)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    8
[3,]    9   10   11   12
> ind<-m[,3:4] > 7
> ind
      [,1]  [,2]
[1,] FALSE FALSE
[2,] FALSE  TRUE
[3,]  TRUE  TRUE
> m[,3:4][ind] = 7
> m
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
[2,]    5    6    7    7
[3,]    9   10    7    7

Аватара пользователя
VistaSV30
Активный участник
Сообщения: 185
Зарегистрирован: 02 июл 2018, 15:05
Репутация: 7
Откуда: Балашиха

Re: Исправить значения в нескольких колонках фрэйма

Сообщение VistaSV30 » 14 июн 2020, 22:08

Спасибо друзья!
Оба варианта работают как надо!
Работают и с matrix и с data.frame.

Спасибо еще раз!
Природа не просто эксцентричнее, чем мы полагаем - она эксцентричнее, чем мы способны предположить. John Haldane

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя