R:识别列对并计算差异
我有一个数据帧df,如下所示:R:识别列对并计算差异,r,R,我有一个数据帧df,如下所示: X A_T B_N B_T C_N C_T C_T.1 C_T.2 D_N D_T D_T.1 E_T F_N w 1 5 9 13 17 21 25 29 33 37 41 45 x 2 6 10 14 18 22 26 30 34 38 42 46 y 3 7 11 15 19
X A_T B_N B_T C_N C_T C_T.1 C_T.2 D_N D_T D_T.1 E_T F_N
w 1 5 9 13 17 21 25 29 33 37 41 45
x 2 6 10 14 18 22 26 30 34 38 42 46
y 3 7 11 15 19 23 27 31 35 39 43 47
z 4 8 12 16 20 24 28 32 36 40 44 48
在第一列之后的WARE列在这里有一个前缀a到F,但可以是包含字符、数字或符号的任何其他字符串,然后是a u,然后是T或N。然后以T结尾的ID也可以在末尾有.1或.2
我想做的是首先识别具有相同前缀的所有可能的ID对,在这样一个表中,m1和m2只是指每对ID的member1和member2,m1是_N成员,m2是_T成员,pair是ID对的名称:
m1 m2 pair
B_N B_T B
C_N C_T C
C_N C_T.1 C.1
C_N C_T.2 C.2
D_N D_T D
D_N D_T.1 D.1
请注意,不属于一对的ID像a、E和F一样被丢弃
然后我想计算每一对的m2和m1的df列之间的差异,并将其放入一个新表中,其中每一列是一对,如下所示:
X B C C.1 C.2 D D.1
w 4 4 8 12 4 8
x 4 4 8 12 4 8
y 4 4 8 12 4 8
z 4 4 8 12 4 8
请注意,该解决方案需要适用于较大的数据帧,其中我们无法单独指示值,并且适用于ID前缀可以是任何包含字符、数字或符号的字符串的数据帧
请让我知道,如果有什么我可以澄清,并感谢您的帮助
df的dput:
> dput(df)
structure(c("w", "x", "y", "z", "1", "2", "3", "4", "5", "6",
"7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
"18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28",
"29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
"40", "41", "42", "43", "44", "45", "46", "47", "48"), .Dim = c(4L,
13L), .Dimnames = list(NULL, c("X", "A_T", "B_N", "B_T", "C_N",
"C_T", "C_T.1", "C_T.2", "D_N", "D_T", "D_T.1", "E_T", "F_N")), class = "noquote")
下面是一种使用tidyverse工具执行此操作的方法 用于重塑数据形状-先长后宽 用于常规数据操作,包括内部连接 仅用于创建pair变量的字符串操作 图书馆弹琴 图书馆三年 图书馆长 创建数据 df_原价% separatekey,cprefix,后缀,sep=_ 德福朗 >A tibble:48 x 4 >X前缀后缀值 > * >1 w A T 1 >2 x A T 2 >3 y A T 3 >4 z A T 4 >5 w B N 5 >6xBn6 >7 y B N 7 >8 z B N 8 >9 w B T 9 >10 x B T 10 > ... 还有38行 为N和T创建单独的表 df_n% filtersuffix==N df_t% 过滤器UFFIX!=N 合并N表和T表以获得对,计算差异,重塑宽度 在这里,您应该使用和internal_join删除只在其中一个中出现的案例,如A、E和F df_合并% mutatepair=str_cprefix,str_subsuffix_m2,2, 值=值\u m2-值\u m1%>% 选择X,配对,值%>% 电子数据对,值 df_合并 >一个tibble:4x7 >X B C.1 C.2 D.1 > * >1 w 4 4 8 12 4 8 >2x4481248 >3 y 4 8 12 4 8 >4Z4481248
谢谢你详细的回答!我发现错误“read_table2”不是从“namespace:readr”@arielle导出的对象。您可能必须安装最新版本的readr。但是对于这个例子来说,这也不重要,这就是我如何重新创建数据的方式,您必须已经在R中拥有了数据。