如何使用gather()函数指定多个列以整理数据

时间:2017-08-30 17:26:19

标签: r transpose tidyr tidyverse

我想用收集功能整理我的数据但是如何一次指定多个列?

说这是我的数据:

    Country Country.Code Year X0tot4 X5tot9 X10tot14 X15tot19 X20tot24
1  Viet Nam          704 1955   4606   2924     2389     2340     2502
2  Viet Nam          704 1960   5842   4410     2860     2356     2318
3  Viet Nam          704 1965   6571   5646     4328     2823     2335
4  Viet Nam          704 1970   7065   6391     5548     4271     2797
5  Viet Nam          704 1975   7658   6862     6237     5437     4208
6  Viet Nam          704 1980   7991   7473     6754     6113     5266
7  Viet Nam          704 1985   8630   7855     7375     6657     6027
8  Viet Nam          704 1990   9212   8513     7770     7277     6571
9  Viet Nam          704 1995   9200   9099     8447     7702     7140
10 Viet Nam          704 2000   7245   9119     9053     8402     7610
11 Viet Nam          704 2005   6760   7140     8997     8951     8257
12 Viet Nam          704 2010   7277   6657     7015     8891     8775
13 Viet Nam          704 2015   7753   7233     6623     6982     8817

现在,我想创建一个包含Age.groupsX0tot4变量的新列X20tot24

df %>% gather(key = "Age.group", value = c(4:8))这样的东西。控制台说这不是正确的列规范。但那是什么?

3 个答案:

答案 0 :(得分:8)

gather函数中,value指定结果中值列的名称;要指定收集的列,可以使用start_column:end_column语法,这将收集 start_column end_column 的所有列;在您的情况下,它将是X0tot4:X20tot24

df %>% gather(key = 'Age.group', value = 'Value.name', X0tot4:X20tot24)
#                        V                     V
#                              V               V
#                                    V         V
#      Country Country.Code Year Age.group Value.name
#1   Viet Nam           704 1955    X0tot4       4606
#2   Viet Nam           704 1960    X0tot4       5842
#3   Viet Nam           704 1965    X0tot4       6571
#4   Viet Nam           704 1970    X0tot4       7065
#5   Viet Nam           704 1975    X0tot4       7658
#6   Viet Nam           704 1980    X0tot4       7991
#7   Viet Nam           704 1985    X0tot4       8630

答案 1 :(得分:6)

Psidom的答案很好。或者,您可以使用" - "。

排除列
df %>% gather(key = "Age.group", value = value, -Country, -Country.Code, -Year)

答案 2 :(得分:6)

我们还可以通过匹配字符串来指定gather的列。以下都可以。

library(tidyverse)

# Match by the beginning of a string with a pattern
df %>% gather(Age.group, Value.name, starts_with("X"))

# Match by if a string containing a pattern
df %>% gather(Age.group, Value.name, contains("X"))

# Match by a regular expression pattern
df %>% gather(Age.group, Value.name, matches("X"))