2016-07-21 3 views
3

Я пытаюсь обновить значение в фрейме данных, которое является числовым, когда оно превышает определенное значение из-за ошибки ввода. Значение должно быть в сотнях, но, порой, в тысячах, поскольку оно имеет дополнительный ноль. Кадр данных называется DF и столбец называется Значение1R как условно обновить числовое значение в кадре данных

Value1 (sample values) 
650 
6640 
550 

Значение 7650 должно быть 765. Я пытаюсь использовать следующее:

df$Value1[df$Value1>1000] <- df$Value1/10 

Это порождает очень странные результаты. В итоге у меня не было значений больше 1000, но значение 6640 стало 74,1 вместо 664, как я ожидал.

Любые предложения?

Заранее спасибо

+1

Вы должны Подмножество свой RHS слишком 'ДФ $ Значение1 [DF $ Значение1> 1000] <- ДФ $ Значение1 [DF $ Значение1> 1000 ]/10' ИЛИ просто используйте 'ifelse' –

ответ

0

Вот один из способов:

#Sample data frame 
d1 
    Value1 
1 650 
2 6640 
3 550 

d1$Value1 = as.numeric(substr(d1$Value1,1,3)) 

#result 
d1 
    Value1 
1 650 
2 664 
3 550 
2

Вот как сделать это в одной строке, без необходимости расчета индексов целевой строки дважды:

df$Value1[ris <- which(df$Value1>1000)] <- df$Value1[ris]/10; 
df; 
## Value1 
## 1 650 
## 2 664 
## 3 550 

Данные

df <- data.frame(Value1=c(650L,6640L,550L)); 
1

Или мы можем использовать data.table (данные @ bgoldst переживайте)

library(data.table) 
setDT(df)[Value1 > 1000, Value1 := Value1/10] 
df 
# Value1 
#1: 650 
#2: 664 
#3: 550 
Смежные вопросы