2016-11-17 4 views
0

У меня есть dataframe как этотСортировка кадр данных и сохранить основные седловины

name stock_11 stock_1 stock_2 
    main1 0  4  1 
    main2 2  2  3 
    main3 4  4  8 
    main4 7  7  3 

И я хотел бы короткий ФР на основе имени каждого столбца, но сохранить первое «имя» столбца. Для других имен Col это столбец «stock_»

Выходной результат я стараюсь иметь это:

name stock_1 stock_2 stock_11 
main1 4  1  0 
main2 2  3  2 
main3 4  8  4 
main4 7  3  7 

Я попытался это, но он сортирует все имена:

df[ , order(names(df))] 

ответ

2

Если вы имеют много столбцов

df[, c(1, order(as.numeric(gsub("[^0-9]+", "", names(df)[-1]))) + 1)] 

    name stock_1 stock_2 stock_11 
1 main1  4  1  0 
2 main2  2  3  2 
3 main3  4  8  4 
4 main4  7  3  7 

Как вы упомянули в комментарии, это решение по-прежнему будет работать, если вы можете принять t его порядок цены и запасов несовместим. Вот пример:

# Example 
df 

    name price_2 price_1 stock_2 stock_1 stock_11 price_11 
1 main1  1  4  1  4  0  0 
2 main2  3  2  3  2  2  2 
3 main3  8  4  8  4  4  4 
4 main4  3  7  3  7  7  7 

# Solution 
# Note that the order of stock and price is not consistent 
df[, c(1, order(as.numeric(gsub("[^0-9]+", "", names(df)[-1]))) + 1)] 

    name price_1 stock_1 price_2 stock_2 stock_11 price_11 
1 main1  4  4  1  1  0  0 
2 main2  2  2  3  3  2  2 
3 main3  4  4  8  8  4  4 
4 main4  7  7  3  3  7  7 

Вот способ обойти, что:

df1 <- df[c(names(df)[1], sort(names(df)[-1], decreasing=TRUE))] 
df1[, c(1, order(as.numeric(gsub("[^0-9]+", "", names(df1)[-1]))) + 1)] 

    name stock_1 price_1 stock_2 price_2 stock_11 price_11 
main1  4  4  1  1  0  0 
main2  2  2  3  3  2  2 
main3  4  4  8  8  4  4 
main4  7  7  3  3  7  7 
+0

спасибо, если работает идеально. Один вопрос, если это просто, можно использовать его для столбца, такого как stock_1 price_1 stock_2 price_2. Я имею в виду порядок, основанный на количестве, и я знаю, что основная часть колмунов - это акции и цена_? – Jake

+0

Вам нужно было поддерживать заказ на акции и цену? Например, акции будут всегда после цены. – JasonWang

+0

Да, это заказ – Jake

Смежные вопросы