2016-03-04 3 views
1

Я хотел бы изменить некоторые значения некоторых строк. Согласно предыдущим вопросам, которые, казалось, прямо вперед с df[df$column=="value",]<-"new value" Однако я получаю ошибку character string is not in a standard unambiguous format применения, что:Как изменить значение строки строки?

Некоторые данные:

dates <- seq(as.Date("2015-02-13"), as.Date("2015-02-22"), by = "days") 
b <- c("one","one","two","two","four","four","one","one","five","five") 
c <- c(20,30,26,20,30,40,5,10,4,0) 
d <- c(11,2233,12,2,22,13,23,23,100,1) 
df <- data.frame(dates,b,c,d) 

Я просто хотел бы изменить все те семь:

df[df$b=="one",]<-"seven" 

символьная строка отсутствует в стандартном недвусмысленном формате

+1

Может 'ДФ $ б [DF $ Ь == "один"] <- "семь"'? – zx8754

ответ

0

Вы можете использовать stringr библиотеку,

df$b <- str_replace_all(df$b, "one", "seven") 
#  dates  b c d 
#1 2015-02-13 seven 20 11 
#2 2015-02-14 seven 30 2233 
#3 2015-02-15 two 26 12 
#4 2015-02-16 two 20 2 
#5 2015-02-17 four 30 22 
#6 2015-02-18 four 40 13 
#7 2015-02-19 seven 5 23 
#8 2015-02-20 seven 10 23 
#9 2015-02-21 five 4 100 
#10 2015-02-22 five 0 1 
+1

Это в 5 или 6 раз медленнее, чем более традиционное решение R. Есть ли какая-то польза от этого, чего я не вижу? – cory

+0

@cory работает как для факторов, так и для символов – Sotos

+1

Использование этого подхода работает только для меня. Использование базы R дает мне «неправильное количество индексов на матрице» в моем исходном наборе данных. Я не знаю почему и не имею много времени, чтобы понять это. Поэтому нет необходимости давать правильные ответы. –

3

Две вещи ... stringsAsFactors и задание.

я довольно много привыкли к использованию stringsAsFactors=FALSE в любое время я использую read.csv или read.* в целом и data.frame. Это сожгло меня так много раз, и иногда оно полностью бесшумно, без каких-либо предупреждений или ошибок, когда оно тебя сжигает.

dates <- seq(as.Date("2015-02-13"), as.Date("2015-02-22"), by = "days") 
b <- c("one","one","two","two","four","four","one","one","five","five") 
c <- c(20,30,26,20,30,40,5,10,4,0) 
d <- c(11,2233,12,2,22,13,23,23,100,1) 
df <- data.frame(dates,b,c,d, stringsAsFactors=FALSE) 
df$b[df$b=="one"]<-"seven" 
Смежные вопросы