使用R在Excel工作表中清理数据

时间:2011-09-10 20:04:49

标签: r excel

我在Excel工作表中有数据,我需要一种方法来清理它。我想删除不一致的值,如分支名称被指定为(计算机科学与工程,C.S.E,C.S,计算机科学)。那么我怎样才能将它们全部带入单一符号?

3 个答案:

答案 0 :(得分:6)

汽车包具有recode功能。查看工作示例的帮助页面。

事实上可以提出一个论点,即这应该是一个封闭的问题:

Why is recode in R not changing the original values?

How to recode a variable to numeric in R?

Recode/relevel data.frame factors with different levels

还可以通过搜索轻松识别更多问题:[r] recode

修改 我非常喜欢Marek的评论,我决定制作一个实现它的功能。 (因素一直是我的R-traps之一,他的方法似乎非常直观。)该函数旨在获取字符或因子类输入并返回分组结果,该结果也对“all_others”级别进行分类。

my_recode <- function(fac, levslist){ nfac <- factor(fac);
    inlevs <- levels(nfac);
    othrlevs <- inlevs[ !inlevs %in% unlist(levslist) ]
      # levslist of the form ::::    list(
      #     animal = c("cow", "pig"),
      #     bird = c("eagle", "pigeon") )
 levels(nfac)<- c(levslist, all_others =othrlevs); nfac}

 df <- data.frame(name = c('cow','pig','eagle','pigeon', "zebra"), 
              stringsAsFactors = FALSE)
 df$type <- my_recode(df$name, list(
     animal = c("cow", "pig"),
     bird = c("eagle", "pigeon") ) )
 df
#-----------
    name       type
1    cow     animal
2    pig     animal
3  eagle       bird
4 pigeon       bird
5  zebra all_others

答案 1 :(得分:3)

您想要一种清理数据的方法并指定R.是否有原因? (自动化,遥控[控制台],......)

如果没有,我会建议Open Refine。对于这项工作来说,这是一个很棒的工具完全。它是托管,您可以安全地下载它并针对您的数据集运行(xls / xlsx正常工作),然后创建一个文本构面并将其分组。

它使用高级算法(甚至可以让您选择)并且非常有用。我很快就清理了很多数据。

official web site的视频很有用。

答案 2 :(得分:2)

对于这些类型的问题,没有一种尺寸适合所有解决方案。根据我的理解,你有不一致标记的分支名称。

您希望看到C.S.E.但你实际拥有的是CS,计算机科学,CSE等。也许还有许多不一致的其他分支名称。

我要做的第一件事是在文件中获取一个唯一的分支名称列表。我将使用letters()提供一个示例,以便您可以看到我的意思

your_df <- data.frame(ID=1:2000)
your_df$BranchNames <- sample(letters,2000, replace=T)
your_df$BranchNames <- as.character(your_df$BranchNames) # only if it's a factor
unique.names <- sort(unique(your_df$BranchNames))

现在我们有一个排序的唯一值列表,我们可以创建一个重新编码列表:

假设我们想将A到G重命名为A

your_df$BranchNames[your_df$BranchNames %in% unique.names[1:7]] <- "A"

您将重复上述过程,根据需要删除或分组唯一名称。