【发布时间】:2021-08-13 13:05:44
【问题描述】:
我有一个这样的数据框:
df<-structure(list(Date = structure(c(17605, 18179, 17605, 18508,
17626, 17837, 17963, 17900, 17823, 18008), class = "Date"), Patient = c("Doe, John",
"Doe, John", "Scissorhands, Edward", "Coleman, Ronnie", "Cuomo, Governor",
"Kent, Clark", "Wayne, Bruce", "Lane, Lois", "Gray, Dorian",
"Gray, Dorian"), MRN = c(12345, 12345, 54321,
65432, 765432, 9876, 87654, 111111,
101010, 101010), DOB = structure(c(5254, 5254, -1561,
-10629, 428, 3005, 3156, -2127, -5836, -5836), class = "Date"),
`ICD-10 Billed Procedure Code` = c("Detachment at Right Ring Finger, Mid, Open Approach",
"Detachment at Right Ring Finger, Low, Open Approach", "Detachment at Right Index Finger, Mid, Open Approach",
"Detachment at Left Hand, Complete 5th Ray, Open Approach",
"Detachment at Right Hand, Complete 5th Ray, Open Approach",
"Detachment at Right Little Finger, High, Open Approach",
"Detachment at Right Hand, Partial 1st Ray, Open Approach",
"Detachment at Left Index Finger, High, Open Approach", "Detachment at Right Index Finger, Low, Open Approach",
"Detachment at Left Index Finger, Low, Open Approach"), Admission = structure(c(0,
0, 0, 0, 1, 5, 2, 0, 0, 0), class = "difftime", units = "days")), row.names = c(NA,
-10L), class = c("tbl_df", "tbl", "data.frame"), problems = structure(list(
row = 456L, col = "Discharge Date", expected = "date like %m/%d/%Y",
actual = "c", file = "'Patients.csv'"), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame")))
而且我想将其旋转得更宽,以便每位患者只有一排。我可以用这段代码做到这一点,它在我的数据的前十行(如您在上面看到的)上运行良好:
df<-df%>%pivot_wider(names_from = `ICD-10 Billed Procedure Code`,values_from = c(Date,Admission))
它会创建一堆列,其中包含患者进行每次手术的日期以及每次手术入院时长的信息。没关系。稍后我会将所有这些新列组织成我想要的。
当我尝试在我拥有的所有行(总共 497 行)上运行它时出现了我的问题,当我添加第 11 行时,您可以在此处看到它。
df2<-structure(list(Date = structure(c(17605, 18179, 17605, 18508,
17626, 17837, 17963, 17900, 17823, 18008, 18008), class = "Date"),
Patient = c("Doe, John",
"Doe, John", "Scissorhands, Edward", "Coleman, Ronnie", "Cuomo, Governor",
"Kent, Clark", "Wayne, Bruce", "Lane, Lois", "Gray, Dorian",
"Gray, Dorian",
"Gray, Dorian"), MRN = c(12345, 12345, 54321,
65432, 765432, 9876, 87654, 111111,
101010, 101010, 101010), DOB = structure(c(5254,
5254, -1561, -10629, 428, 3005, 3156, -2127, -5836, -5836,
-5836), class = "Date"), `ICD-10 Billed Procedure Code` = c("Detachment at Right Ring Finger, Mid, Open Approach",
"Detachment at Right Ring Finger, Low, Open Approach", "Detachment at Right Index Finger, Mid, Open Approach",
"Detachment at Left Hand, Complete 5th Ray, Open Approach",
"Detachment at Right Hand, Complete 5th Ray, Open Approach",
"Detachment at Right Little Finger, High, Open Approach",
"Detachment at Right Hand, Partial 1st Ray, Open Approach",
"Detachment at Left Index Finger, High, Open Approach", "Detachment at Right Index Finger, Low, Open Approach",
"Detachment at Left Index Finger, Low, Open Approach", "Detachment at Right Index Finger, Low, Open Approach"
), Admission = structure(c(0, 0, 0, 0, 1, 5, 2, 0, 0, 0,
0), class = "difftime", units = "days")), row.names = c(NA,
-11L), class = c("tbl_df", "tbl", "data.frame"), problems = structure(list(
row = 456L, col = "Discharge Date", expected = "date like %m/%d/%Y",
actual = "c", file = "'Patients.csv'"), row.names = c(NA,
-1L), class = c("tbl_df", "tbl", "data.frame")))
所有应该为 NA 的单元格都变成了 NULL,日期格式变得很奇怪。
鉴于我大致知道导致它的原因,我认为这一定是两个“Dorian Gray”行共享相同的“程序代码”。 (我认为?如果我错了,请告诉我)问题是,这种情况会发生几次,我想我可以接受吗?最终,我会将输出压缩为: “Patient, MRN, DOB, Number_of_Surgeries, Total_Admission_Time”,但我想在将列浓缩为“手术次数”和“总入院时间”之前先解决这个 pivot_wider。
那么...我该如何解决这个错误?
【问题讨论】:
-
你试过这个解决方案了吗? stackoverflow.com/questions/58837773/…
-
您似乎复制了标识符,因此 Ronak 建议的解决方案应该很好用!