Перекодировать / переименовать данные в кадре данных, в то время как grep используется для выбора определенных переменных - PullRequest
1 голос
/ 29 марта 2011

В моем фрейме данных я выбираю только переменные test3-test8

data[,grep('(test[3-8]+$)',names(data)),]

Теперь я хочу заменить "1" на "2".Согласно df[ df == "1" ] = "2" я пытался:

data[,grep('(test[3-8]+$)',names(data)),][ data[,grep('(test[3-8]+$)',names(data)),] == "1" ] = "2"

Это не сработало.

Ошибка в [<-.data.frame (*tmp*,, grep ("(^ dv_beh_ [0-9] + r)", имена (данные)),: неиспользованный аргумент (ы) ()

В чем моя ошибка?

1 Ответ

3 голосов
/ 29 марта 2011

Устраните лишние запятые (которые указывают параметры для фрейма данных, но вы не указываете никаких параметров), и ошибка исчезнет:

dtf <- data.frame(test1=runif(10))
dtf <- cbind(dtf,dtf)
dtf <- cbind(dtf,dtf)
dtf[3,3] <- 1
names(dtf) <- paste("test",seq(ncol(dtf)),sep="")
names.sel <- grep('(test[3-8]+$)',names(dtf))
dtf[,names.sel][ dtf[,names.sel] == 1 ] <- 2
stopifnot(dtf[3,3]==2)

И чтобы доказать, что это проблема, я могу воспроизвестиошибка с:

data[,names.sel,][ data[,names.sel] == 1 ,] <- 2
Error in `[<-.data.frame`(`*tmp*`, , grep("(test[3-8]+$)", names(data)),  : 
  unused argument(s) ()
...