如何在保留R中的其他长数据的同时调整多个因素



假设我有这个数据集:

#### Load Library ####
library(tidyverse)
#### Create Data ####
df <- data.frame(city = c("rural","urban","rural","urban","rural"),
smog = c("high","low","high","low","high"),
x1 = c(1,2,3,4,5),
x2 = c(1,2,3,4,5),
y1 = c(1,2,3,4,5),
y2 = c(1,2,3,4,5))

看起来像这样:

city smog x1 x2 y1 y2
1 rural high  1  1  1  1
2 urban  low  2  2  2  2
3 rural high  3  3  3  3
4 urban  low  4  4  4  4
5 rural high  5  5  5  5

如果我使用一个变量,将这些数据转换为长格式并不困难。然而,我试图将x和y变量分别转换为一列,同时将城市和烟雾变量保留在相同的数据中。我目前正在查看的数据有许多变量需要转换为长格式,还有许多变量需要保持宽格式。我的最佳猜测是:

#### Pivot Data ####
df %>% 
pivot_longer(cols = contains(c("x","y")),
names_to = c("x.items", "y.items"),
values_to = "value")

除此之外:

#### Pivot Data Version 2 ####
df %>% 
pivot_longer(cols = contains(c("x","y")),
names_to = c("x.items", "y.items"),
values_to = c("value.x", "value.y"))

但这似乎在任何一种情况下都不起作用。任何建议都会很有帮助。

您应该将names_to.value一起使用,并在names_pattern中定义模式(这里,第一组是xy,第二组是数字(。列的名称由位于与.value(此处为第一个(相同位置的组的名称给定。

注意,contains(c("x", "y"))包括"city",所以最好使用matches或否定(我在这里所做的(。

df %>% 
pivot_longer(cols = -c("city", "smog"),
names_to = c(".value", "n"),
names_pattern = "(x|y)(\d)")

输出

# A tibble: 10 × 5
city  smog  n         x     y
<chr> <chr> <chr> <dbl> <dbl>
1 rural high  1         1     1
2 rural high  2         1     1
3 urban low   1         2     2
4 urban low   2         2     2
5 rural high  1         3     3
6 rural high  2         3     3
7 urban low   1         4     4
8 urban low   2         4     4
9 rural high  1         5     5
10 rural high  2         5     5

最新更新