我有一个数据框,列的格式为:
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
答案 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