2017-06-16 92 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