R根据列名拆分将数据框列转换为单列
R transform data frame columns into single column based on column name split
一个常见的数据清理问题,但有点曲折,我在执行时遇到了麻烦。
我有一个包含多列 year.month 信息的数据集,如下所示:
loc type 2010.01 2010.02 2010.03
Manhattan a 2300 2300 2500
Manhattan b 2999 2975 2975
我想根据列名转换数据,方法是在“.”处按年和月拆分。
因此数据将如下所示:
loc type year month value
Manhattan a 2010 01 2300
Manhattan a 2010 02 2300
Manhattan a 2010 03 2500
Manhattan b 2010 01 2999
Manhattan b 2010 02 2975
Manhattan b 2010 03 2975
我该怎么做?
我正在考虑使用 melt,类似这样的东西,但我是 R 的新手并且知道这是不正确的:
df <- melt(df,id=1,measure=patterns(".",value.name="Value"))
您可以通过 pivot_longer
和 tidyr
中的 separate
实现此目的。试试这个:
library(dplyr)
library(tidyr)
df <- read.table(text = "loc type 2010.01 2010.02 2010.03
Manhattan a 2300 2300 2500
Manhattan b 2999 2975 2975 ", header = TRUE)
df
#> loc type X2010.01 X2010.02 X2010.03
#> 1 Manhattan a 2300 2300 2500
#> 2 Manhattan b 2999 2975 2975
df %>%
pivot_longer(-c(loc:type)) %>%
separate(name, into = c("year", "month")) %>%
mutate(year = gsub("X", "", year))
#> # A tibble: 6 x 5
#> loc type year month value
#> <fct> <fct> <chr> <chr> <int>
#> 1 Manhattan a 2010 01 2300
#> 2 Manhattan a 2010 02 2300
#> 3 Manhattan a 2010 03 2500
#> 4 Manhattan b 2010 01 2999
#> 5 Manhattan b 2010 02 2975
#> 6 Manhattan b 2010 03 2975
由 reprex package (v0.3.0)
于 2020-04-04 创建
一个常见的数据清理问题,但有点曲折,我在执行时遇到了麻烦。
我有一个包含多列 year.month 信息的数据集,如下所示:
loc type 2010.01 2010.02 2010.03
Manhattan a 2300 2300 2500
Manhattan b 2999 2975 2975
我想根据列名转换数据,方法是在“.”处按年和月拆分。
因此数据将如下所示:
loc type year month value
Manhattan a 2010 01 2300
Manhattan a 2010 02 2300
Manhattan a 2010 03 2500
Manhattan b 2010 01 2999
Manhattan b 2010 02 2975
Manhattan b 2010 03 2975
我该怎么做?
我正在考虑使用 melt,类似这样的东西,但我是 R 的新手并且知道这是不正确的:
df <- melt(df,id=1,measure=patterns(".",value.name="Value"))
您可以通过 pivot_longer
和 tidyr
中的 separate
实现此目的。试试这个:
library(dplyr)
library(tidyr)
df <- read.table(text = "loc type 2010.01 2010.02 2010.03
Manhattan a 2300 2300 2500
Manhattan b 2999 2975 2975 ", header = TRUE)
df
#> loc type X2010.01 X2010.02 X2010.03
#> 1 Manhattan a 2300 2300 2500
#> 2 Manhattan b 2999 2975 2975
df %>%
pivot_longer(-c(loc:type)) %>%
separate(name, into = c("year", "month")) %>%
mutate(year = gsub("X", "", year))
#> # A tibble: 6 x 5
#> loc type year month value
#> <fct> <fct> <chr> <chr> <int>
#> 1 Manhattan a 2010 01 2300
#> 2 Manhattan a 2010 02 2300
#> 3 Manhattan a 2010 03 2500
#> 4 Manhattan b 2010 01 2999
#> 5 Manhattan b 2010 02 2975
#> 6 Manhattan b 2010 03 2975
由 reprex package (v0.3.0)
于 2020-04-04 创建