3

df2 の名前に基づいて、df1 の特定の列名にサフィックスまたはプレフィックスを追加したいと考えていました。私のdf1はこのように見えます、

AE02    AE03    AE04    AE05    AE06    AE07    AE08    AE09    AE10    AE11    AE12
11.9619362364   18.5701402709   42.2010838789   28.0025053738   19.5589170223   18.1459582989   16.5292369479   32.4885640738   34.0342144643   31.6971000153   44.932255488
2.9904840591    3.9793157723    0   0   1.7780833657    1.7281865047    13.7743641233   4.3318085432    0   17.067669239    0
0   0   0   0   2.6671250485    0   4.5914547078    0   0   0   2.1396312137

df2 は次のようになります。

 V1
AE06
AE08    
AE09
AE12

次のように、これらの列名を新しい名前に置き換えることができます。

colnames(df1)[which(colnames(df1) %in% df2$V1 )] <- "DMR"

しかし、列名を置き換えるのではなく、列名にプレフィックスとして追加できるソリューションを探しています。たとえば、列名は次のようになります。

AE02    AE03    AE04    AE05    DMR_AE06    AE07    DMR_AE08    DMR_AE09    AE10    AE11    DMR_AE12

どんな提案や助けも高く評価されています

4

2 に答える 2

7

パンダのソリューション:

numpy.whereで使用maskできますIndex.isin

print (df.columns.isin(df2.V1))
[False False False False  True False  True  True False False  True]

df.columns = np.where(df.columns.isin(df2.V1), 'DMR_' + df.columns, df.columns)
print (df)
        AE02       AE03       AE04       AE05   DMR_AE06       AE07  \
0  11.961936  18.570140  42.201084  28.002505  19.558917  18.145958   
1   2.990484   3.979316   0.000000   0.000000   1.778083   1.728187   
2   0.000000   0.000000   0.000000   0.000000   2.667125   0.000000   

    DMR_AE08   DMR_AE09       AE10       AE11   DMR_AE12  
0  16.529237  32.488564  34.034214  31.697100  44.932255  
1  13.774364   4.331809   0.000000  17.067669   0.000000  
2   4.591455   0.000000   0.000000   0.000000   2.139631  
于 2016-10-26T12:39:45.027 に答える