如何使用正则表达式修改r中的文本文件并获取所需的文件?

时间:2018-01-11 18:03:38

标签: r regex writetofile

我有这样的数据框:

Patient_ID=c(10001,10002,10002,10003,10001,10004,10005,10005,10006,10006)
Diagnosis_Codes=c(1,16,5,55,28,1,1,12,14,83)
Diag_Index= c(1,2,3,4,5,6,7,8,9,10)
df=data.frame(Patient_ID,Diag_Index,Diagnosis_Codes)
df

我使用以下代码来获得宽格式数据:

library(reshape2)
wide_df <- dcast(df, Patient_ID ~ Diag_Index, value.var='Diagnosis_Codes')
wide_df

  Patient_ID  1  2  3  4  5  6  7  8  9 10
1      10001  1 NA NA NA 28 NA NA NA NA NA
2      10002 NA 16  5 NA NA NA NA NA NA NA
3      10003 NA NA NA 55 NA NA NA NA NA NA
4      10004 NA NA NA NA NA  1 NA NA NA NA
5      10005 NA NA NA NA NA NA  1 12 NA NA
6      10006 NA NA NA NA NA NA NA NA 14 83

现在我需要将这个数据帧转换为一个文本文件,在该文件中删除了NA并且列用0分隔,除了第一列和第二列我只需要“逗号”作为分隔符!最后一列是0

所需的文本文件应如下所示:

10001,1,0,28,0
10002,16,0,5,0
10003,55,0
10004,1,0
10005,1,0,12,0
10006,14,0,83,0

使用以下代码,我将df转换为文本文件,并使用0作为分隔符。

write.table(wide_df, file = “raw_file.txt", row.names=FALSE, col.names=FALSE, sep=",0,")

然后尝试通过正则表达式编辑文件以省略NA并进行其他必要的更改,但我对正则表达式知之甚少,并且还无法完成它!正则表达式是否适合此问题?或者我应该做点什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

最好从您的长data.frame转到您想要的输出。

这是一种可能性:

library(data.table)
out <- as.data.table(df)[, sprintf("%s,0", 
  paste(Diagnosis_Codes, collapse = ",0,")), Patient_ID]
out
#    Patient_ID        V1
# 1:      10001  1,0,28,0
# 2:      10002  16,0,5,0
# 3:      10003      55,0
# 4:      10004       1,0
# 5:      10005  1,0,12,0
# 6:      10006 14,0,83,0
fwrite(out, file = "your_file.csv", row.names = FALSE, col.names = FALSE)