我有一个类似的数据框架:
> dput(df)
structure(list(Name = "Jon", Age = 23, Name1 = "Jessica", Age1 = 13,
Name2 = "Martin", Age2 = 54), class = "data.frame", row.names = c(NA,
-1L))
我想把它拉长,这样所有的名字都在一列中,所有的年龄都在另一列中。我发现这很难做到,因为列名不同。
所需输出:
Name Age
1 Jon 23
2 Jessica 13
3 Martin 54
谢谢!
library(tidyr)
pivot_longer(df, everything(),
names_pattern = "([^0-9]+)[0-9]*$",
names_to = ".value")
# # A tibble: 3 x 2
# Name Age
# <chr> <dbl>
# 1 Jon 23
# 2 Jessica 13
# 3 Martin 54
或与data.table::melt
:
data.table::melt(
as.data.table(df),
measure.vars = patterns(Name="^Name", Age="^Age"))
# variable Name Age
# <fctr> <char> <num>
# 1: 1 Jon 23
# 2: 2 Jessica 13
# 3: 3 Martin 54
(我们可以很容易地去掉variable
列)