首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R查找因子变量的相似字模式

使用R查找因子变量的相似字模式
EN

Stack Overflow用户
提问于 2014-04-18 09:39:56
回答 2查看 1K关注 0票数 0

我有Data10 000 Observations,变量名为Com,输入Factor带有3000 Levels。我在这里要做的是在变量Com中找到类似的值模式,然后将其组合成一个。所以,我可以稍后再做分析。str of Data如下所示:

代码语言:javascript
复制
> Data
 'data.frame':   10000 obs. of  1 variable:
  $ Com: Factor w/ 3000 levels

示例:Frequency of Com

代码语言:javascript
复制
> Frequency<-data.frame(Com=c("C/C++ PROGRAMMING", "C; C++ PROGRAMMING", "C++ PROGRAMMING", "C++", "PROGRAMMING C++", "C", "C PROGRAMMING", "C, C++ PROGRAMMING", "PROGRAMMING IN C; C++", "PROGRAMMINGS IN C/C++","PROGRAMMING IN C/C++", "PROGRAMMING (C, C++, CUDA)"), Freq=c(2,3,3,1,2,5,6,2,1,3,4,5))
> Frequency
                                 Com   Freq
1                  C/C++ PROGRAMMING      2
2                 C; C++ PROGRAMMING      3
3                    C++ PROGRAMMING      3
4                                C++      1
5                    PROGRAMMING C++      2
6                                  C      5
7                      C PROGRAMMING      6
8                 C, C++ PROGRAMMING      2
9              PROGRAMMING IN C; C++      1
10             PROGRAMMINGS IN C/C++      3
11              PROGRAMMING IN C/C++      4
12        PROGRAMMING (C, C++, CUDA)      5       # Just add one more situation

我希望Frequency的结果是:

代码语言:javascript
复制
> Frequency
                                 Com   Freq
1                  C/C++ PROGRAMMING     15
2                    C++ PROGRAMMING      6
3                      C PROGRAMMING     11
4         PROGRAMMING (C, C++, CUDA)      5

为此,我可以对Com的级别进行重新编码。但是,这个变量3000 Levels(Com),我必须一个接一个地找到它,这将占用我的时间。

那么,在不花费那么多时间的情况下,还有其他方法可以做到这一点吗?我试过看Pattern matching and replacement in R,但仍然不能解决这个问题。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-18 10:30:34

您可以在一些步骤中使用正则表达式:

代码语言:javascript
复制
dat$Freq <- as.numeric(dat$Freq)
dat$Com[grep('.*(C).*(C[++]).*',dat$Com)] <- 'ccplusplus'
dat$Com[grep('C[++]',dat$Com)] <- 'cplusplus'
dat$Com[grep('C',dat$Com)] <- 'c'
tapply(dat$Freq,dat$Com,sum)

# c ccplusplus  cplusplus 
# 11         15          6
票数 1
EN

Stack Overflow用户

发布于 2014-04-18 10:08:18

在包stringr中,您可以很容易地利用str_detect,并且可以通过考虑要分组的模式有哪些共同之处来工作。我可以猜到这是一项艰苦的工作,但我不认为R能进入你的头脑,找到你认为“相似”的东西。

举个例子:

代码语言:javascript
复制
df$Com_grouped <- NA

df$Com_grouped <- ifelse(str_detect(df$Com, "C") & (!str_detect(df$Com, "C[++]")), "C PROGRAMMING", df$Com_grouped)

最后:tapply(df$Freq, df$Com_grouped, sum),这样你就可以得到频率。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23151453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档