在代码描述中替换R中的编码变量
代码说明表:在代码描述中替换R中的编码变量,r,R,代码说明表: Procedure X1 X2 X3 Desc 1 3852 002 0 0 Brain 2 3853 003 0 0 Heart 3 3854 004 0 0 Skin 4 3876 005 0 0 Throat 仅包含代码以及该代码频率的表: Procedure Freq 1 3852 22 2 385
Procedure X1 X2 X3 Desc
1 3852 002 0 0 Brain
2 3853 003 0 0 Heart
3 3854 004 0 0 Skin
4 3876 005 0 0 Throat
仅包含代码以及该代码频率的表:
Procedure Freq
1 3852 22
2 3853 3
我想把桌子做成这样:
Procedure Freq
1 Brain 22
2 Heart 3
我尝试过合并过程变量,但没有成功。我使用的merge命令是:
总计假设您的表位于两个data.frames
df1
和df2
中
both<-merge(df1,df2)
both <- both[,c("Desc", "Freq")]
colnames(both)[1] <- "Procedure"
two如果第一个表是df1
并且假设每个“过程”只有一个“Desc”:
保留所需的列:
df_final <- df2_merged[c('Desc', 'Freq')]
df_final我认为这不管用。它说我需要一个by变量,所以我把它放在我的过程中。我不确定这是不是正确的方法。再次感谢你的帮助。抱歉,我对RW非常陌生。当我合并它们时,我在最终数据集中得到的行数要比程序和频率表中的行数多得多。您有比上面显示的更多的列吗?您能dput
几行数据吗?我添加了一些真实数据。Patientid和claimids只是这些的频率。我有第一个表中程序的匹配程序代码。我意识到对于同一个过程代码有不同的描述。我只是想得到第一个描述,然后忽略后面的描述。再次感谢你的帮助!我刚刚试过,但在合并中,我得到了:fix.by(by.x,x)中的错误:'by'必须指定一个唯一有效的列很难说,但看起来您的列名中有一个是“Procedures”而不是“Procedures”。在这种情况下,您必须使用merge(df2,desc_map,by.x=“Procedure”,by.y=“Procedures”)是的,我已经试过了,对不起。我刚才多次确认它们是一样的。我让它运行,但它要么给我的数据太少,要么给我的数据太多。数据太少通常意味着没有每个过程的描述映射。使用all.x=T修复该问题。数据过多意味着一个过程有多个描述映射。有多种方法可以解决这个问题,但我认为在merge函数中没有
desc_map <- unique(df1[c('Procedure', 'Desc')])
df2_merged <- merge(df2, desc_map, by = 'Procedure')
df_final <- df2_merged[c('Desc', 'Freq')]