R pivot_是多个不同类型的变量
我正试图找到一种简单的方法来透视一个数据帧,该数据帧有多个列,每个列包含不同的数据。在R pivot_是多个不同类型的变量,r,tidyr,R,Tidyr,我正试图找到一种简单的方法来透视一个数据帧,该数据帧有多个列,每个列包含不同的数据。在names\u to中使用多个名称似乎无法解决问题 以下是一个成功的例子: #create the dataframe: library('dplyr') set.seed(11) x <- data.frame(case = c(1:10), X1990 = runif(10, 0, 1), flag.1990 = rep(c('a','b
names\u to
中使用多个名称似乎无法解决问题
以下是一个成功的例子:
#create the dataframe:
library('dplyr')
set.seed(11)
x <- data.frame(case = c(1:10),
X1990 = runif(10, 0, 1),
flag.1990 = rep(c('a','b'), 5),
X2000 = runif(10, 0, 1),
flag.2000 = rep(c('c', 'd'), 5))
> x
case X1990 flag.1990 X2000 flag.2000
1 1 0.2772497942 a 0.1751129 c
2 2 0.0005183129 b 0.4407503 d
3 3 0.5106083730 a 0.9071830 c
4 4 0.0140479084 b 0.8510419 d
5 5 0.0646897766 a 0.7339875 c
6 6 0.9548492255 b 0.5736857 d
7 7 0.0864958912 a 0.4817655 c
8 8 0.2899750092 b 0.3306110 d
9 9 0.8806991728 a 0.1576602 c
10 10 0.1232162013 b 0.4801341 d
事情不可行,因为标志数据不在变量名中
我认为解决这个问题的唯一方法是将数据帧分解为两个数据帧,对它们进行透视,然后将它们连接起来。例如:
#create temporary data frame for year data, then pivot
temp1 <- x %>%
select(1,2, 4) %>% #select year data
pivot_longer(cols = c(X1990, X2000), #pivot longer on year data
names_to = 'year',
values_to = 'value') %>%
mutate(year = gsub('X', '', year)) #remove 'X' so that I can use this to join
#create temporary data frame for flag data, then pivot
temp2 <- x %>%
select(1, 3, 5) %>% #select flag variables
pivot_longer(cols = c(flag.1990, flag.2000), #pivot longer on flag data
names_to = 'flag.year',
values_to = 'flag') %>%
mutate(year = gsub('flag.', '', flag.year)) %>% #get year data so that I can join on this
select(-flag.year) #drop flag.year as its no longer useful information
final <- full_join(temp1, temp2, by = c('case', 'year')) #full join the two datasets to get the final data
> final
# A tibble: 20 x 4
case flag year value
<int> <chr> <chr> <dbl>
1 1 a 1990 0.277
2 1 c 2000 0.175
3 2 b 1990 0.000518
4 2 d 2000 0.441
5 3 a 1990 0.511
6 3 c 2000 0.907
7 4 b 1990 0.0140
8 4 d 2000 0.851
9 5 a 1990 0.0647
10 5 c 2000 0.734
11 6 b 1990 0.955
12 6 d 2000 0.574
13 7 a 1990 0.0865
14 7 c 2000 0.482
15 8 b 1990 0.290
16 8 d 2000 0.331
17 9 a 1990 0.881
18 9 c 2000 0.158
19 10 b 1990 0.123
20 10 d 2000 0.480
#为年份数据创建临时数据框,然后透视
临时工1%
选择(1,2,4)%>%#选择年份数据
数据透视时间更长(cols=c(X1990,X2000),#数据透视时间更长
名称_to='年',
值_to='value')%>%
mutate(year=gsub('X','',year))#删除'X',以便我可以使用它加入
#为标志数据创建临时数据框,然后透视
临时雇员2%
选择(1、3、5)%>%#选择标志变量
pivot_longer(cols=c(flag.1990,flag.2000),#在标志数据上pivot longer
name_to='flag.year',
值_to='flag')%>%
mutate(year=gsub('flag.','',flag.year))%>%#获取年份数据,以便我可以加入此项目
选择(-flag.year)#删除flag.year作为不再有用的信息
决赛
#一个tibble:20x4
案例标志年值
1 a 1990 0.277
2 1 c 2000 0.175
3 2 b 1990 0.000518
42D2000 0.441
5 3 a 1990 0.511
6 3 c 2000 0.907
7 4 b 1990 0.0140
8.4 d 2000 0.851
95A 1990 0.0647
10 5 c 2000 0.734
116b 1990 0.955
12 6 d 2000 0.574
137A 1990 0.0865
14 7 c 2000 0.482
15 8 b 1990 0.290
16 8 d 2000 0.331
17 9 a 1990 0.881
18 9 c 2000 0.158
19 10 b 1990 0.123
20 10 d 2000 0.480
我想有一种更快的方法。我是否只是误读了有关在
名称\u至中使用多个名称的文档。有什么想法吗?在这种情况下,必须使用名称
与名称
模式相结合:
库(dplyr)
图书馆(tidyr)
>x%>%
pivot_更长(cols=-情况,
名称_to=c(“.value”,“year”),
名称\u模式=“([^\\.]*)\\.*(\\d{4})”)
#一个tibble:20x4
案例X年旗帜
1 1990 0.277 a
212000 0.175摄氏度
3.2 1990 0.000518 b
4220000.441d
53 1990 0.511 a
6.3 2000 0.907摄氏度
7 4 1990 0.0140 b
8 4 2000 0.851 d
951990 0.0647 a
10520000.734摄氏度
11 6 1990 0.955 b
12 6 2000 0.574 d
13 7 1990 0.0865 a
14 7 2000 0.482摄氏度
15 8 1990 0.290 b
16 8 2000 0.331 d
17 9 1990 0.881 a
18 9 2000 0.158摄氏度
19 10 1990 0.123 b
20 10 2000 0.480 d
在这种情况下,必须使用名称到
与名称模式结合使用
:
库(dplyr)
图书馆(tidyr)
>x%>%
pivot_更长(cols=-情况,
名称_to=c(“.value”,“year”),
名称\u模式=“([^\\.]*)\\.*(\\d{4})”)
#一个tibble:20x4
案例X年旗帜
1 1990 0.277 a
212000 0.175摄氏度
3.2 1990 0.000518 b
4220000.441d
53 1990 0.511 a
6.3 2000 0.907摄氏度
7 4 1990 0.0140 b
8 4 2000 0.851 d
951990 0.0647 a
10520000.734摄氏度
11 6 1990 0.955 b
12 6 2000 0.574 d
13 7 1990 0.0865 a
14 7 2000 0.482摄氏度
15 8 1990 0.290 b
16 8 2000 0.331 d
17 9 1990 0.881 a
18 9 2000 0.158摄氏度
19 10 1990 0.123 b
20 10 2000 0.480 d
#create temporary data frame for year data, then pivot
temp1 <- x %>%
select(1,2, 4) %>% #select year data
pivot_longer(cols = c(X1990, X2000), #pivot longer on year data
names_to = 'year',
values_to = 'value') %>%
mutate(year = gsub('X', '', year)) #remove 'X' so that I can use this to join
#create temporary data frame for flag data, then pivot
temp2 <- x %>%
select(1, 3, 5) %>% #select flag variables
pivot_longer(cols = c(flag.1990, flag.2000), #pivot longer on flag data
names_to = 'flag.year',
values_to = 'flag') %>%
mutate(year = gsub('flag.', '', flag.year)) %>% #get year data so that I can join on this
select(-flag.year) #drop flag.year as its no longer useful information
final <- full_join(temp1, temp2, by = c('case', 'year')) #full join the two datasets to get the final data
> final
# A tibble: 20 x 4
case flag year value
<int> <chr> <chr> <dbl>
1 1 a 1990 0.277
2 1 c 2000 0.175
3 2 b 1990 0.000518
4 2 d 2000 0.441
5 3 a 1990 0.511
6 3 c 2000 0.907
7 4 b 1990 0.0140
8 4 d 2000 0.851
9 5 a 1990 0.0647
10 5 c 2000 0.734
11 6 b 1990 0.955
12 6 d 2000 0.574
13 7 a 1990 0.0865
14 7 c 2000 0.482
15 8 b 1990 0.290
16 8 d 2000 0.331
17 9 a 1990 0.881
18 9 c 2000 0.158
19 10 b 1990 0.123
20 10 d 2000 0.480