2016-09-07 2 views
3
кадр AEbySOC

данных содержит два столбца - фактор SOC с уровнями символов и целым количество Count:Одним из уровней фактора является пустая строка; как заменить его не пропущенным значением?

> str(AEbySOC) 
'data.frame': 19 obs. of 2 variables: 
$ SOC : Factor w/ 19 levels "","Blood and lymphatic system disorders",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ Count: int 25 50 7 3 1 49 49 2 1 9 ... 

Один из уровней SOC является пустой строкой символов:

> l = levels(AEbySOC$SOC) 
> l[1] 
[1] "" 

Я хочу, чтобы заменить значение этого уровня непустой строкой, скажем, «Не указано». Это не работает:

> library(plyr) 
> revalue(AEbySOC$SOC, c(""="Not specified")) 
Error: attempt to use zero-length variable name 

Ни делает это:

> AEbySOC$SOC[AEbySOC$SOC==""] = "Not specified" 
Warning message: 
In `[<-.factor`(`*tmp*`, AEbySOC$SOC == "", value = c(NA, 2L, 3L, : 
    invalid factor level, NA generated 

Что правильный способ осуществить это? Я ценю любой ввод/комментарий.

ответ

2
levels(AEbySOC$SOC)[1] <- "Not specified" 

Создано пример игрушечный:

df<- data.frame(a= c("", "a", "b")) 

df 
# a 
#1 
#2 a 
#3 b 

levels(df$a) 
#[1] "" "a" "b" 

levels(df$a)[1] <- "Not specified" 

levels(df$a) 
#[1] "Not specified" "a"    "b" 

EDIT

Согласно комментариям Op, если нам нужно найти его по стоимости, то в таком случае, мы можем попробовать

levels(AEbySOC$SOC)[levels(AEbySOC$SOC) == ""] <- "Not specified" 
2

Нечто подобное должно работать:

test <- data.frame(a=c("a", "b", "", " ")) 
str(test) 

which.one <- which(levels(test$a) == "") 
levels(test$a)[which.one] <- "NA" 

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

  • Нет связанных вопросов^_^