【发布时间】:2025-12-07 19:45:02
【问题描述】:
我在 R 中创建了一个映射表,并提供了一个示例:
ex <- data.frame("id" = c(rep(1234,7)), "claim" = c(1234, 1367, 1234, 1869, 1234, 1367,1234),
"code1" = c(24, 61, 28, 21, 20, 29,80), date = c('2019-03-18', '2019-04-12',
'2019-03-18', '2019-03-18',
'2019-03-18', '2019-04-12', '2019-03-18'),
'code2' = c(24,29,24,24,24, 29,24), dx1=c("M234","M123",NA,"M434",NA,NA, NA),
dx2=c(NA,NA,NA,NA,"M789","Z123", "M999"),
dx3 = c(NA,NA,"M689",NA,NA,NA, NA),
pay = c(1000, 520, 1000, 780, 1000,520,1000))
我有什么办法可以把它作为我的最终输出:
ex2 <- data.frame("id" = c(rep(1234,3)), date = c('2019-03-18', '2019-03-18','2019-04-12'),
'code2' = c(24,24,29),
dx1=c("M234","M434","M123"),
dx2=c("M789",NA,"Z123"),
dx3 = c("M689",NA,NA),
dx4 = c("M999", NA, NA),
pay = c(1000,780,520))
我基本上希望将示例 1 中 dx2 或 dx3 中的任何值添加到与该 code2 值对应的同一行中。但是,如果 dx1 中的 code2 有多个值,那么我想将它们保留为单独的行。
有什么方法可以在 R 中做这样的事情吗? 提前致谢!
编辑:在我的映射表(例如)中,只有 dx1、dx2、dx3 列。我希望将 dx2 或 dx3 中的任何多个值作为新列添加(这就是为什么在 ex2 中现在有一个 dx4 列)。这些更改按 code2 分组。因此,如果代码 24 在 dx2 或 dx3 中有多个值,那么这将决定创建多少新的 dx2 列。然后可以通过 max(pay) 列确定订单。
【问题讨论】:
-
ex中没有dx4,但ex2中有。看起来dx4值是dx2的倍数。你能详细描述一下如何处理每个dx类型的多个值吗? -
我在 Q 中加入了解释。如果有帮助,请告诉我!
-
谢谢,这是有用的信息。这是一个不寻常的操作模式。例如,如果
dx1、dx2和dx3在code2中的一个级别各有2 个值,那么您是说您想要两行(每个dx1一个)bu 然后是四列除了dx1,现在是dx2-5?您如何决定将dx2和dx3值中的哪一个放在新列中?也许如果你能多解释一下你的用例,帮助你找到一个更简单的解决方案会更容易。 -
另外,
dx2和dx3的值是否应该只出现在分组code2的第一行?还是对代表唯一dx1的所有行重复? -
应该如何处理
ex的第6 行,其中没有dx1值,但有dx2值?在ex2中,您将此dx2值与dx1放在同一行。但请考虑code2 == 29中是否有两个dx1值。您将如何在没有dx1的行上分配dx2?
标签: r dataframe data.table concatenation tidyverse