楼主: bayes
4714 7

[问答] R的一些字符串处理的问题 [推广有奖]

  • 1关注
  • 0粉丝

博士生

20%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
1 点
热心指数
0 点
信用等级
0 点
经验
1172 点
帖子
78
精华
0
在线时间
419 小时
注册时间
2005-11-5
最后登录
2021-11-14

楼主
bayes 发表于 2011-4-17 13:56:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有这样一些数据:

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?)?
二维码

扫码加我 拉你入群

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

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

关键词:字符串 split rbind Table Order 字符串

沙发
ltx5151 发表于 2011-4-17 14:48:27
grep()寻找特定字符
gsub()用来替换和删除

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

藤椅
beatuxlee 发表于 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
已有 1 人评分热心指数 收起 理由
ryusukekenji + 1 无私分享...

总评分: 热心指数 + 1   查看全部评分

无为有之始

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

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

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

7
beatuxlee 发表于 2018-4-10 08:48:37
橙光329 发表于 2018-4-6 21:11
你好,我试了一下这个程序,没有成功。
要看你运行R时的报错信息才能知道。

8
beatuxlee 发表于 2018-4-11 12:39:54
你可能是MAC机子。复制粘贴时有乱码(标点符号)。建议手输。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 22:00