gpt4 book ai didi

r - tidyr::pivot_longer 到多列

转载 作者:行者123 更新时间:2023-12-05 09:04:52 30 4
gpt4 key购买 nike

我需要将数据框转换为更长的格式。例如,我的数据框会像

df <- data.frame(
group = c("group1","group2"),
x1 = c(3,4),
x2 = c(5,6),
y1 = c(7,8),
y2 = c(9,10)
)

我需要把它转换成

df2 <- data.frame(
group = c("group1","group1","group2","group2"),
num = c(1,2,1,2),
x = c(3,5,4,6),
y = c(7,9,8,10)
)

我想使用 tidyr::pivot_longer 但无法在此处找出 names_pattern。我走在正确的轨道上吗?

df_2<-df%>%tidyr::pivot_longer(c("x1","x2","y1","y2"),
names_to = c("x","y"),
names_pattern = "")

有什么帮助吗?谢谢。

最佳答案

您可以在 names_pattern 中传递正则表达式 -

tidyr::pivot_longer(df,cols = -group, 
names_to = c('.value', 'num'),
names_pattern = '([a-zA-Z]+)(\\d+)')

# group num x y
# <chr> <chr> <dbl> <dbl>
#1 group1 1 3 7
#2 group1 2 5 9
#3 group2 1 4 8
#4 group2 2 6 10

.valuepivot_longer 中有特殊含义,这表明原始数据帧中的部分列名将是输出数据帧的列名。该部分使用 names_pattern 参数决定,该参数以捕获组的形式提供正则表达式模式。

第一个捕获组 ([a-zA-Z]+) 从列名中捕获所有字母,即 x 来自 x1x2 中的 xy1 中的 y 等等。因为我在正则表达式中使用了 +,所以如果您的列名超过 1 个字符(例如 - col1col2),它也会起作用ETC。)。第二个捕获组用于从列名中捕获数字,即 1 来自 x12 来自 x2等等。

关于r - tidyr::pivot_longer 到多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68101083/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com