Ссылка на вектор столбца во фрейме данных в цикле - PullRequest
0 голосов
/ 29 июля 2010

В цикле я пытаюсь преобразовать вектор столбца класса-фактора в число.

Если бы не было цикла, код был бы похож на

c1$values <- as.numeric(as.character(c1$values))

Но как связать значения c1 $ с помощью цикла? Я пробовал два подхода:

get(paste('c',i,"$values", sep="")) 

просто не работает даже вне цикла, тогда как

get(paste('c',"1", sep=""))[[1]]

работает сам по себе (возвращает вектор столбца), но при попытке выполнить операцию:

assign(get(paste("c","1", sep=""))[[1]], as.numeric(as.character(get(paste("c","1", sep=""))[[1]])))

возвращает ошибку «неверный первый аргумент».

Есть идеи?

Спасибо

Роберто

Ответы [ 3 ]

1 голос
/ 29 июля 2010

Вы также можете индексировать столбцы целыми числами.Это объясняется во вводном руководстве по R на веб-сайте R.

1 голос
/ 29 июля 2010

Внутренне оператор $ - это функция, которая может быть явно вызвана как "$" для получения и "$<-" для установки.assign является противоположностью get.Итак, разбив все на отдельные шаги, мы имеем:

varname<-paste("c",1,sep="")
obj<-get(varname)
x<-"$"(obj,"values")
x<-as.numeric(as.character(x))
obj<-"$<-"(obj,"values",x)
assign(varname,obj)

Но закодировать данные (например, индекс) в имя переменной не очень хорошая практика.Возможно, было бы лучше превратить c1, c2 и т. Д. В список или фрейм данных, а затем выполнить итерации по ним.Преобразование может быть сделано примерно так:

lapply(1:2,function(i) get(paste('c',i,sep='')))
0 голосов
/ 29 июля 2010

Вместо того, чтобы преобразовывать ваши факторные переменные в числовые, вам, вероятно, лучше всего выяснить, почему они были превращены в факторы.Ваша проблема, вот простой подход с sapply и lapply:

factors <- sapply(c1, is.factor)
c1[factors] <- lapply(c1[factors], function(x) as.numeric(as.character(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...