我在Excel工作表中有数据,我需要一种方法来清理它。我想删除不一致的值,如分支名称被指定为(计算机科学与工程,C.S.E,C.S,计算机科学)。那么我怎样才能将它们全部带入单一符号?
答案 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"
您将重复上述过程,根据需要删除或分组唯一名称。