我需要在面板結構中放置多個同名但后綴不同的變數。例如,轉換:

在這個結構中:

我嘗試結合 tidyverse 包中的 pivot_longer 和 pivot_wider 函式,但沒有成功,因為變數分布在數字、整數、字符等之間。
我很感激任何幫助。
這是可重現的示例:
structure(list(class.x = c(4, 4, 4, 4, 4), class.y = c("a", "a",
"a", "a", "a"), class.x.x = structure(c(9.88131291682493e-324,
9.88131291682493e-324, 9.88131291682493e-324, 9.88131291682493e-324,
9.88131291682493e-324), class = "integer64"), var1.x = c(1, 1,
1, 1, 1), var1.y = c(0, 0, 0, 0, 0), var1.x.x = c("b", "b", "b",
"b", "b"), var2.x = c(9, 9, 9, 9, 9), var2.y = c(5, 5, 5, 5,
5), var2.x.x = c("c", "c", "c", "c", "c")), class = "data.frame", row.names = c(NA,
-5L))
uj5u.com熱心網友回復:
df %>%
pivot_longer(everything(),
names_to = c('.value','Variable'),
names_pattern = '([^.] )[.](.*)',
values_transform = as.character)
# A tibble: 15 x 4
Variable class var1 var2
<chr> <chr> <chr> <chr>
1 x 4 1 9
2 y a 0 5
3 x.x 0 b c
4 x 4 1 9
5 y a 0 5
6 x.x 0 b c
7 x 4 1 9
8 y a 0 5
9 x.x 0 b c
10 x 4 1 9
11 y a 0 5
12 x.x 0 b c
13 x 4 1 9
14 y a 0 5
15 x.x 0 b c
uj5u.com熱心網友回復:
請注意,提供dput的圖片與您發布的圖片不同:
首先,我們可以創建全部由一個分隔的名稱.
然后我們必須把所有的東西都轉化為角色:我用mutate(across...KU99 做的更優雅values_transform!
現在我們可以應用pivot_longer引數了names_sep。
最終使資料成形。
library(tidyverse)
df %>%
rename_with(~str_replace_all(., ".x.x", ".z")) %>%
mutate(across(everything(), as.character)) %>%
pivot_longer(
everything(),
names_to = c(".value", "var1_2"),
names_sep ="\\."
) %>%
arrange(var1_2) %>%
mutate(Variable=ifelse(var1_2 == "z", "x.x", var1_2), .keep="unused")
class var1 var2 Variable
<chr> <chr> <chr> <chr>
1 4 1 9 x
2 4 1 9 x
3 4 1 9 x
4 4 1 9 x
5 4 1 9 x
6 a 0 5 y
7 a 0 5 y
8 a 0 5 y
9 a 0 5 y
10 a 0 5 y
11 9.88131291682493e-324 b c x.x
12 9.88131291682493e-324 b c x.x
13 9.88131291682493e-324 b c x.x
14 9.88131291682493e-324 b c x.x
15 9.88131291682493e-324 b c x.x
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460970.html
下一篇:R:擬合S形曲線?
