我想用收集功能整理我的数据但是如何一次指定多个列?
说这是我的数据:
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.groups
到X0tot4
变量的新列X20tot24
。
像df %>% gather(key = "Age.group", value = c(4:8))
这样的东西。控制台说这不是正确的列规范。但那是什么?
答案 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"))