楼主: 那是。天
1224 5

[问答] 字符串拆分问题 [推广有奖]

  • 0关注
  • 0粉丝

高中生

92%

还不是VIP/贵宾

-

威望
0
论坛币
1320 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
269 点
帖子
19
精华
0
在线时间
42 小时
注册时间
2015-6-22
最后登录
2020-2-15

楼主
那是。天 发表于 2017-7-30 00:10:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现在有一个字符比如“A1-A2-B3-B31-A11"
我想要用R把他从头到位按顺序分解为"A1-A2"、”A2-B3“、”B3-B31"、“B31-A11”
求大神教我!
二维码

扫码加我 拉你入群

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

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


沙发
那是。天 发表于 2017-7-30 10:11:13
自顶求助

藤椅
丘延君 发表于 2017-7-30 13:17:28
#### 编写函数wtr_splt(chrvec) ####
## 参数chrvec可以为一个字符,也可以是你那种形式的字符串向量
## 输入是一个字符时返回一个向量,输入是一个向量时返回一个列表list
> wtr_splt<-function(chrvec){
+   if(!is.character(chrvec)) stop("The chrvec must be character.")
+   wtr<-chrvec
+   wr_lst<-strsplit(wtr,split = "-")
+   lwst<-length(wr_lst)
+   if(lwst>=2){
+     output_lst<-list()
+     for(i in 1:lwst){
+       wr_vec<-wr_lst[[i]]
+       wr_first<-wr_vec[1:(length(wr_vec)-1)]
+       wr_second<-wr_vec[2:length(wr_vec)]
+       lst<-paste(wr_first,wr_second,sep="-")
+       output_lst[[wtr[i]]]<-lst
+     }
+   } else {
+     wr_vec<-wr_lst[[1]]
+     wr_first<-wr_vec[1:(length(wr_vec)-1)]
+     wr_second<-wr_vec[2:length(wr_vec)]
+     output_lst<-paste(wr_first,wr_second,sep="-")
+   }
+   output_lst
+ }
#### 测试 ####
> wtr_splt(chrvec = "A1-A2-B3-B31-A11")
[1] "A1-A2"   "A2-B3"   "B3-B31"  "B31-A11"
> wt<-c("A1-A2-B3-B31-A11","A1-A4-B5-C31-D11","S1-K2-Q3-B1-A1")
> wtr_splt(wt)
$`A1-A2-B3-B31-A11`
[1] "A1-A2"   "A2-B3"   "B3-B31"  "B31-A11"

$`A1-A4-B5-C31-D11`
[1] "A1-A4"   "A4-B5"   "B5-C31"  "C31-D11"

$`S1-K2-Q3-B1-A1`
[1] "S1-K2" "K2-Q3" "Q3-B1" "B1-A1"
> wtr_splt(c(as.Date("2012-12-23")))##输入一个非字符参数会报错
Error in wtr_splt(c(as.Date("2012-12-23"))) :
  The chrvec must be character.
Called from: wtr_splt(c(as.Date("2012-12-23")))

板凳
丘延君 发表于 2017-7-30 13:22:38
丘延君 发表于 2017-7-30 13:17
#### 编写函数wtr_splt(chrvec) ####
## 参数chrvec可以为一个字符,也可以是你那种形式的字符串向量
##  ...
回复时测试结果的显示有些问题,在R里面是没有问题的,你应该可以直接用这个函数,如果你是有很多这样的字符数据,可以考虑将wtr_splt()和apply、lapply()这些函数结合起来用,希望对你有帮助啦
已有 1 人评分论坛币 收起 理由
jiangbeilu + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

报纸
jiangbeilu 学生认证  发表于 2017-7-30 14:14:07
楼上的容错思想不错。我这里就不考虑容错了,直接贴代码:
  1. split_vec <- function(vec){
  2. aa <- strsplit(vec,split="-")[[1]]
  3. return(paste(aa[-length(aa)],aa[-1],sep="-"))
  4. }
  5. xx <- "A1-A2-B3-B31-A11"
  6. split_vec(xx)
  7. wt<-c("A1-A2-B3-B31-A11","A1-A4-B5-C31-D11","S1-K2-Q3-B1-A1")
  8. lapply(wt,split_vec)
复制代码

地板
那是。天 发表于 2017-7-30 23:36:53
感谢两位大神,怎么给两位大神奖励呢?

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

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