缩短特定组下的数据框列

时间:2016-01-18 12:17:37

标签: r

我有一个数据框,列的格式为:

name             stock1 stock2 value1 value2
stoc_from_csv    Google Yahoo   50      21
stock up to date Opel   Tayoota 42      44

如何重新整理列以使所有1与1相邻,2为相同。输出示例:

    name             stock1 value1 stock2 value2
    stoc_from_csv    Google 50      Yahoo   21
    stock up to date Opel   42      Tayoota 44

1 个答案:

答案 0 :(得分:2)

一个选项是使用sub从列名中删除非数字字符(第一个除外 - 没有任何数字部分),将character输出转换为{{ 1}},numeric并将其用作数字索引来重新排列列。

order

或者以上的变体将使用df1[c(1, order(as.numeric(sub('\\D+', '', names(df1)[-1])))+1L)] # name stock1 value1 stock2 value2 #1 stoc_from_csv Google 50 Yahoo 21 #2 stock up to date Opel 42 Tayoota 44

中的stri_order
stringi

(由@David Arenburg提供)

或者另一种选择是将列名转换为library(stringi) df1[stri_order(sub('\\D+', '', names(df)), opts = list(numeric = TRUE))] (取决于名称是否按序列排列)

matrix