2017-06-16 38 views
0

我想將幾個類似的變量轉換爲因子,但我希望一次完成,而不是單獨完成。最重要的是,我希望使用來自名爲'codes.csv'的外部.csv文件中的信息來實現這一點,其中我已經列出了與該變量有關的所有相關信息,例如, '水平'和'標籤'。我的數據如下所示:使用來自.csv中的信息將多個變量轉換爲因子R

set.seed(1234) 

my_data <- data.frame(citation_1 = sample(c(1:7), 10, replace = TRUE), 
         citation_2 = sample(c(1:7), 10, replace = TRUE), 
         citation_3 = sample(c(1:7), 10, replace = TRUE)) 

my_data 

當然,我可以做以下的每個變量...

codes <- read.csv("codes.csv", header = FALSE) 

my_data$citation_1 <- factor(my_data$citation_1, 
          levels = codes[, 1], 
          labels = codes[, 2]) 

但得是一個更有效的方法;在第二個「標籤」;

citations <- c("citation_1", "citation_2", "citation_3") 

my_data[citations] <- lapply(my_data[citations], factor, 
          levels = codes[, 1], 
          labels = codes[, 2]) 

我「codes.csv」文件如下所示(「水平」在這個模擬文件的第一列中列出:我試過下面的代碼及其變體):

1 dismissed 
2 acquitted by court 
3 acquitted by jury 
4 convicted/plea of guilty 
5 convicted/plea of nolo contendere 
6 convicted by court 
7 convicted by jury 

(我會附上上面的.csv文件,但我不認爲我可以。)先謝謝您的幫助。

回答

0

您可以實現您想要的結果,對lapply進行小改動。我們將使用匿名函數將factor應用於每列。

my_data[citations] <- lapply(my_data[citations], function(each_column){ 
    factor(each_column, 
      levels = codes[, 1], 
      labels = codes[, 2]) 
    }) 

爲此,您可以直接閱讀的codes.csvlapply,如果你希望這樣。

my_data[citations] <- lapply(my_data, function(each_column) { 
    factor(each_column, 
      levels = read.csv("codes.csv")[, 1], 
      labels = read.csv("codes.csv")[, 2]) 
    }) 
+0

工作正常!非常感謝您的及時回覆 - 您已經節省了我的時間毫不費力地反覆輸入相同的代碼... – Banjaxed

+0

考慮接受答案:) –

+0

啊......我只是點擊綠色箭頭,如果這就是你的意思;我在這些部分中有點新手。再次感謝。 – Banjaxed

相關問題