所以,我有一个数据框,我们称之为df1,看起来像这样:
r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12
1 1 2 2 2 0 2 1 2 0 2 1 2
2 0 2 2 2 2 2 0 2 0 2 2 2
3 1 2 2 2 0 2 2 2 2 1 2 2
4 1 2 2 2 2 1 2 2 2 1 2 2
5 0 1 2 2 0 2 1 0 0 1 1 0
6 0 2 0 2 0 2 2 0 0 2 2 2
7 1 2 2 2 2 2 2 0 0 1 2 2
8 0 2 2 2 2 2 2 2 2 2 2 2
9 0 2 2 2 2 2 1 1 1 1 1 2
还有一个名为df2的表格,它看起来像这样
r1 r2 r3 r4 r5 ...
1 arp1_base melo1_base son_clave melo2_base melo3_major ...
2 arp1_v1 melo1_v1 rumba_clave melo2_staccato melo3_minor ...
3 arp1_v2 melo1_v2 rumba_clave_v1 melo2_contour melo3_contour ...
我不会将所有列都粘贴在这里,但你可以了解到这个想法(是的,行数是不同的)。
现在,我需要用第二个数据框中与该列匹配的值替换第一个数据框中每一列中的数字,并使用第一个数据框中的数字作为第二个数据框中的行索引。我想要的是一个新的数据框,它将会像这样:
r1 r2 r3 ...
1 arp1_v1 melo1_v2 rumba_clave_v1 ...
2 arp1_base melo1_v2 rumba_clave_v1 ...
3 arp1_v1 melo1_v2 rumba_clave_v1 ...
. . . .
. . . .
. . . .
我该怎么做呢?理想情况下,每个新列都应该是一个因子,保留三个名称作为级别。顺便说一句,我觉得这有点像常见问题,但我面临着一个通常的n00b问题,就是不知道该搜索什么。有什么奇妙的方法吗?
根据@akrun在下面的建议,我可以使用
df1 [] <- Map(function(x, y) factor(y [x + 1]), df1, df2)
,我几乎得到我想要的结果,也就是说,df1
的列现在是具有替换值的因子,但我需要每个这些因子都具有来自df2
相应列的所有值作为级别。
factor(df1$r1, levels=df2$r1)
并获取我想要的列,那么我该如何将这个因子放回到 df1 中呢? - Morpheu5df1[] <- Map(function(x, y) factor(y[x+1]), df1, df2)
。 - akrunc('arp1_base','arp1_v1','arp1_v2')
。 - Morpheu5