我有这样的数据框:
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并进行其他必要的更改,但我对正则表达式知之甚少,并且还无法完成它!正则表达式是否适合此问题?或者我应该做点什么?谢谢你的帮助。
答案 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)