2016-08-02 43 views
1

我有2個csv文件,其中的數據看起來像運行相同的R文件,我有數百行和列運行,我希望轉換1 =註冊,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_eachdplyr

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

我不得不嘗試測試[] < - lapply(試驗,函數(X)ifelse(X == 0, 「註冊」, 「退出」)),堅果我的NA值成爲退出,而不是我想要的NA值替換爲無數據 – wow5

+1

@akrun對我來說一個新事物是'%<>%',讓我檢查它的功能。謝謝。 –

+1

@ SowmyaS.Manian它會改變'Test'中的值。因此,我們不需要將其分配給'Test <- Test %>%...' – akrun

1

一,創建數據幀df10NA

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" 

三,最終df

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

OR

​​
+0

當我替換特定的值時,它會提示警告消息 在'[< - 。factor'('* tmp *',thisvar,值=「退出」):無效因子水平,產生的不適用 – wow5

+0

請向您顯示您從中得到此錯誤的實際命令。可能那麼它會更好理解。 –