使用 Tidyr 透视更长的时间 - 多个变量存储在列名中
Pivot longer using Tidyr - Multiple variables stored in column names
我正在尝试重塑以下输入:
family_number father_name father_code mother_name mother_code children
1 1 John M11 Jane F21 2
2 2 Thomas M12 Mary F22 3
3 3 Jack M13 Jennifer F23 0
使用 tidyr::pivot_longer
:
转换成更长的格式
family_number name code children
1 1 John M11 2
2 1 Jane F21 2
3 2 Thomas M12 3
4 2 Mary F22 3
5 3 Jack M13 0
6 3 Jennifer F23 0
如果您有多个特别想要旋转的列,我不太明白它是如何工作的。谢谢!
输入table代码:
foo <- data.frame(family_number = c(1, 2, 3),
father_name = c("John", "Thomas", "Jack"),
father_code = c("M11", "M12", "M13"),
mother_name = c("Jane", "Mary", "Jennifer"),
mother_code = c("F21", "F22", "F23"),
children = c(2, 3, 0))
我不认为您可以在单个数据透视操作中完成它。您只能在一列中旋转几列,afaik。我的方法是合并列、旋转然后将它们分开。
foo %>%
tidyr::unite("father", father_name, father_code) %>%
tidyr::unite("mother", mother_name, mother_code) %>%
tidyr::pivot_longer(c(father, mother), values_to = "parent") %>%
select(-name) %>%
tidyr::separate(parent, into=c("name", "code"))
# A tibble: 6 x 4
family_number children name code
<dbl> <dbl> <chr> <chr>
1 1 2 John M11
2 1 2 Jane F21
3 2 3 Thomas M12
4 2 3 Mary F22
5 3 0 Jack M13
6 3 0 Jennifer F23
我们可以使用 pivot_longer
通过指定 names_to
来匹配列名称中的模式
library(dplyr)
library(tidyr)
foo %>%
pivot_longer(cols = -c(family_number, children),
names_to = c("grp", ".value"), names_sep = "_") %>%
select(-grp)
# A tibble: 6 x 4
# family_number children name code
# <dbl> <dbl> <chr> <chr>
#1 1 2 John M11
#2 1 2 Jane F21
#3 2 3 Thomas M12
#4 2 3 Mary F22
#5 3 0 Jack M13
#6 3 0 Jennifer F23
我正在尝试重塑以下输入:
family_number father_name father_code mother_name mother_code children
1 1 John M11 Jane F21 2
2 2 Thomas M12 Mary F22 3
3 3 Jack M13 Jennifer F23 0
使用 tidyr::pivot_longer
:
family_number name code children
1 1 John M11 2
2 1 Jane F21 2
3 2 Thomas M12 3
4 2 Mary F22 3
5 3 Jack M13 0
6 3 Jennifer F23 0
如果您有多个特别想要旋转的列,我不太明白它是如何工作的。谢谢!
输入table代码:
foo <- data.frame(family_number = c(1, 2, 3),
father_name = c("John", "Thomas", "Jack"),
father_code = c("M11", "M12", "M13"),
mother_name = c("Jane", "Mary", "Jennifer"),
mother_code = c("F21", "F22", "F23"),
children = c(2, 3, 0))
我不认为您可以在单个数据透视操作中完成它。您只能在一列中旋转几列,afaik。我的方法是合并列、旋转然后将它们分开。
foo %>%
tidyr::unite("father", father_name, father_code) %>%
tidyr::unite("mother", mother_name, mother_code) %>%
tidyr::pivot_longer(c(father, mother), values_to = "parent") %>%
select(-name) %>%
tidyr::separate(parent, into=c("name", "code"))
# A tibble: 6 x 4
family_number children name code
<dbl> <dbl> <chr> <chr>
1 1 2 John M11
2 1 2 Jane F21
3 2 3 Thomas M12
4 2 3 Mary F22
5 3 0 Jack M13
6 3 0 Jennifer F23
我们可以使用 pivot_longer
通过指定 names_to
来匹配列名称中的模式
library(dplyr)
library(tidyr)
foo %>%
pivot_longer(cols = -c(family_number, children),
names_to = c("grp", ".value"), names_sep = "_") %>%
select(-grp)
# A tibble: 6 x 4
# family_number children name code
# <dbl> <dbl> <chr> <chr>
#1 1 2 John M11
#2 1 2 Jane F21
#3 2 3 Thomas M12
#4 2 3 Mary F22
#5 3 0 Jack M13
#6 3 0 Jennifer F23