全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
4603 7
2011-04-17
我有这样一些数据:

num name
1234 Zhang San
2245 zhang San; Li Si
3764 Zhang Si; Wang Er-xiao

需要把这个数据表整理成(num,单个name)这样的组合,也就是输出成如下的样式:

num name
1234 Zhang San
2245 Zhang San
2245 Li Si
3764 Zhang Si
3764 Wang Erxiao

第一,我一开始看到人名是用分号隔开的,所以想问问有没有函数可以直接计算字符串中的某个字符?比如计算分号在name中的次数,这样就可以知道一个号码对应多少个人名了。
第二,后来我发现其实不需要这样,用strsplit就能分开这个name字符串,(不过还是想了解一下有没有第一个问题里所需要的函数)。但是问题是分开以后,怎么把对应num拷贝多次,对应给多个人名,并且加入数据表呢(rbind?)?
第三,单个人名也需要处理,只保留字母和姓名之间的空格,要删除前缀和后缀的空格(sub+正则?),要删除名字之间的'-',只有每个姓或名的首字母才大写,其余都改为小写字母,这些不知道用什么函数处理?
最后,在这个数据表完成后,可以用order来按人名排序,但是如何计算人名的频数呢?也就是每个人名出现的次数。我想生成一个新的数据表,两个变量,name和频数,不知道应该用什么函数来处理(table?)?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2011-4-17 14:48:27
grep()寻找特定字符
gsub()用来替换和删除

具体操作和其他的有关regular expression的函数,lz可以从这几个函数的帮助里面找到。
但是个人认为,这样的问题,如果可以,用python或者java处理更方便些.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-17 16:20:17
numNameSplit <- function(dat,splitchar=";") {
    require(foreach)
  res <- foreach(a=iapply(dat,1),.combine="rbind") %do% {
     cr <- grep(";",a[2])
    if(length(cr)==0) {
    res <- a
  } else {
    y <- strsplit(x=a[[2]],split=splitchar)
    res <- foreach(b=y,.combine="rbind") %do% cbind(num=a[[1]],name=b)
  }
  res
}
    return(res)
  }

num <- c(1234,2245,3764)
name <- c("Zhang San","zhang San; Li Si","Zhang Si; Wang Er-xiao")
dat <- data.frame(num=num,name=name)
numNameSplit(dat)  
>  numNameSplit(dat)  
   num          name
1 1234     Zhang San
2 2245     zhang San
3 2245         Li Si
4 3764      Zhang Si
5 3764  Wang Er-xiao
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2011-4-18 15:50:49
非常感谢,看过这个实例,对grep和strsplit的了解加深了很多。
foreach这个包原来没接触过,还在研究中。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-6 21:11:17
beatuxlee 发表于 2011-4-17 16:20
numNameSplit
你好,我试了一下这个程序,没有成功。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-4-6 21:14:40
beatuxlee 发表于 2011-4-17 16:20
numNameSplit
用你那个例子也没有弄好,这是怎么回事呀?请教
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群