2013-05-14 3 views
5

Я пытаюсь заменить определенную строку в большом data.frame. Я просто нашел следующее решение, но gsub не сохраняет исходный макет data.frame. Как я могу это достичь.заменить строку в dataframe

Я хочу заменить строку и не хочу менять макет df.

Рассмотрим следующий пример:

test<-data.frame(a=c("a","b","c","d"),b=c("a","e","g","h"),c=c("i","j","k","a")) 
gsub("a","new",test) 

Thx

ответ

14

Вы хотите lapply через ваш data.frame тестирования character или factor записей, а затем применяя gsub соответствующим образом. Результатом будет list, но as.data.frame исправляет это.

test$val <- 1:4 # a non character/factor variable 
(test2 <- as.data.frame(lapply(test,function(x) if(is.character(x)|is.factor(x)) gsub("a","new",x) else x))) 
    a b c val 
1 new new i 1 
2 b e j 2 
3 c g k 3 
4 d h new 4 
class(test2$val) # to see if it is unchanged 
[1] "integer" 
+0

Почему вы заключили все выражение в скобки? –

+3

@RichardSmith. Это делает выражение для визуального отображения результата на консоль. Присвоение обычно возвращается невидимо. – James

6
as.data.frame(sapply(test, function(x) gsub("a", "new", x))) 
+0

спасибо, но это дает мне матрицу символов, мой ДФ имеет числовые значения тоже, то я столкнуться с проблемами при обработке данных в дальнейшем – rainer

+1

я просто работал с вашим примером. – Thomas

Смежные вопросы