全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1277 6
2020-04-15
大家好,我想用正则表达式同时结合循环提取医嘱中的有关信息并生成一个新的数据框,但是遇到源数据不符合我写的正则表达式的时候,系统就会报错了,我不知道该怎么修改才可以跳过这些不符合格式的源数据,或者生成NA也行,希望得到各位大神的指教,谢谢大家。
l <- dim(df1)[1]
df3 <- as.data.frame(matrix(NA,nrow = 1, ncol = 6))
l3 <- 0
for (i in 1:l) {
  df2 <- str_match_all(df4[i,2], "(\\d+-\\d+-\\d+)&([\u4E00-\u9FA5]+)&(\\d+)&&.*?[qQ](\\d+)h\\s?[×x\\*](\\d).*")  [[1]][,-1]

    n <- 1
    l3 <- l3 + n
    df3[l3,1] <- df4[i,1]
    df3[l3,2:6] <- df2

}
colnames(df3) <- c("B.ID", "date", "milk.type","intake","hours","times")
breast.milk <- df3
系统报错:
Error in `[<-.data.frame`(`*tmp*`, l3, 2:6, value = character(0)) :
  replacement has 0 items, need 5


二维码

扫码加我 拉你入群

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

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

全部回复
2020-4-15 15:04:49
str(df2)是什么?
二维码

扫码加我 拉你入群

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

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

2020-4-15 15:20:09
drunkfish69 发表于 2020-4-15 15:04
str(df2)是什么?
我的代码里没有那样的式子啊,我不明白你问的是什么?
我的代码里,df2 <- str_match_all(df4[i,2], "regularexpression")
二维码

扫码加我 拉你入群

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

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

2020-4-15 15:28:27
人命关天的事,只能自己解决。万一整错了呢,医嘱啊。
你这是用df4的列1形成df3的列1,df4的列2提取数据形成df3的数据列。我觉得不符合你的表达式,就跳过或NA,会导致df3的数据不完整,还是应该在正则之前,先进行数据清洗,人工调整成标准格式或补充空数据,毕竟不规范的数据应该还是少数,否则你的正则表达式也就没意义了。
二维码

扫码加我 拉你入群

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

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

2020-4-15 15:52:40
llb_321 发表于 2020-4-15 15:28
人命关天的事,只能自己解决。万一整错了呢,医嘱啊。
你这是用df4的列1形成df3的列1,df4的列2提 ...
放心,这只是一个几年前的数据拿来分析,不会影响生命安全的
不能手动调整不符合的格式,因为数据量太大了
二维码

扫码加我 拉你入群

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

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

2020-4-15 18:59:25
看你的代码,正则表达式没问题,是df2的问题,上面的同学已经提示你用str(df2)检查一下,你的df3需要df2是5列的啊
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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