我在Excel工作表中有数据,我需要一种方法来清理它。我想删除不一致的值,如分支机构名称指定为(计算机科学与工程,C.S.E,C.S,计算机科学)。那么,我如何才能将所有这些都整合到一个符号中呢?
发布于 2011-09-11 04:08:22
car包有一个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
还有一些更容易通过搜索识别的问题:
编辑:我非常喜欢Marek的评论,所以我决定做一个实现它的函数。(对我来说,因素一直是R陷阱之一,他的方法似乎非常直观。)该函数被设计为接受字符或因子类输入,并返回一个分组结果,该结果也划分为"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发布于 2011-12-15 00:20:07
您想要一种清理数据的方法,但您指定了R。这是有原因的吗?(自动化、远程控制控制台等...)
如果没有,我建议使用Open Refine。这是一个伟大的工具,完全这项工作。它是而不是托管的,你可以安全地下载它并在你的数据集上运行(xls/xlsx工作良好),然后你创建一个文本facet并分组离开。
它使用先进的算法(甚至给你一个选择),真的很有帮助。我在短时间内清理了大量数据。
official web site上的视频很有用。
发布于 2011-09-11 06:36:35
对于这些类型的问题,没有一刀切的解决方案。据我所知,您的分支机构名称的标签不一致。
您可能希望看到C.S.E.,但您实际拥有的是CS、Computer Science、CSE等,可能还有许多其他分支机构名称不一致。
我要做的第一件事是在文件中获得一个唯一的Branch名称列表。我将提供一个使用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"您可以重复上面的过程,根据需要消除或分组唯一的名称。
https://stackoverflow.com/questions/7374314
复制相似问题