2016-08-02 4 views
1

У меня есть 2 файла csv, которые выглядят так, что они запускают один и тот же файл R, у меня есть сотни строк и столбцов для запуска, я хочу преобразовать 1 = Enroll, 0 = Бросил, «» = нет данных:Преобразование значения в R в нескольких столбцах

Test <- read.csv("..\\..\TestFile.csv", colClasses = "factor") 
[1] [2] [3] 
1 0    
0 1 
1 1 
1 0 1 

[1] [2] [3] 
1 0    
1 1 
1 0 
1 0 1 

So, far I had tried on 

revalue(Test$1, c("1" = "Enroll")) -> Test$1 
revalue(Test$1, c("0" = "Quit")) -> Test$1 
revalue(Test$2, c("1" = "Enroll")) -> Test$2 
revalue(Test$2, c("0" = "Quit")) -> Test$2 
revalue(Test$3, c("1" = "Enroll")) -> Test$3 
revalue(Test$3, c("0" = "Quit")) -> Test$3 

write.csv(Test, "TestFile.csv", na = "No data") 

But, it promt the warning msg: The following `from` values were not present in `x`: 1. 
The NA string unable to update to "No data". Please help. 

ответ

0

мы можем использовать lapply для изменения значений в каждом из столбцов

Test[] <- lapply(Test, function(x) {x1 <- c("Quit", "Enroll")[x+1] 
        replace(x1, is.na(x1), "No Data")}) 
Test 
# Col1 Col2 Col3 
#1 Enroll Quit Enroll 
#2 Quit Quit No Data 
#3 Quit Quit Quit 
#4 Enroll Enroll No Data 

Если у нас есть сотни столбцов, другой подход mutate_each от dplyr

library(dplyr) 
library(magrittr) 
Test %<>% 
     mutate_each(funs(c("Quit", "Enroll")[.+1])) %<>% 
     mutate_each(funs(replace(., is.na(.), "No Data"))) 
+0

Я был попробовать [] wow5

+1

@akrun. Новая вещь для меня - '% <>%', позвольте мне проверить, что она делает. Спасибо. –

+1

@ SowmyaS.Manian Он изменит значения в «Тесте» на месте. Поэтому нам не нужно назначать его «Тест <- Test %>% ...» – akrun

1

I. Создан dataframe df с 1, 0 и NA

df <- data.frame(Col1 = c(1,0,0,1), Col2 = c(0,0,0,1), Col3 = c(1,NA,0,NA)) 
    df 
    # Col1 Col2 Col3 
    # 1 1 0 1 
    # 2 0 0 NA 
    # 3 0 0 0 
    # 4 1 1 NA 

II. Подставляя конкретные значения

df[df == 0] <- "Quit" 
    df[df == 1] <- "Enroll" 
    df[is.na(df)] <- "No Data" 

III. Окончательный df

df 
    #  Col1 Col2 Col3 
    # 1 Enroll Quit Enroll 
    # 2 Quit Quit No Data 
    # 3 Quit Quit Quit 
    # 4 Enroll Enroll No Data 

ИЛИ

c(df[is.na(df)] <- "No Data" , df[df == 0] <- "Quit", df[df == 1] <- "Enroll") 
    # [1] "No Data" "Quit" "Enroll" 

    df 
    #  Col1 Col2 Col3 
    # 1 Enroll Quit Enroll 
    # 2 Quit Quit No Data 
    # 3 Quit Quit Quit 
    # 4 Enroll Enroll No Data 
+0

Когда я подставлял определенное значение, он выдает предупреждающее сообщение В '[<-. Factor' (' * tmp * ', thisvar, value = "Quit"): недопустимый факторный уровень, сгенерированный NA – wow5

+0

Пожалуйста, покажите фактическую команду, с которой вы получили эту ошибку. Может быть, тогда лучше понять. –

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