R中如何使用pivot_longer()同时透视数据生成两个目标列
实现方案
你可以直接用pivot_longer的内置特殊参数.value完成需求,不需要分步骤操作,完整代码如下:
# 加载tidyr包 library(tidyr) df_long <- df %>% pivot_longer( cols = -id, names_to = c("variable", ".value"), names_sep = "\\." ) %>% rename(activation = act, fixation = fix)
运行后打印df_long即可得到你需要的目标格式:
> df_long # A tibble: 4 × 4 id variable activation fixation <dbl> <chr> <dbl> <dbl> 1 1 v1 0.4 1 2 1 v2 0.5 0 3 2 v1 0.8 0 4 2 v2 0.7 1
参数说明
cols = -id:指定保留id列为标识列,其余所有列参与长宽转换names_to = c("variable", ".value"):其中.value是pivot_longer的特殊参数,表示拆分列名得到的第二部分会直接作为新的数据列名,替代默认的name+value列结构names_sep = "\\.":指定用.作为列名的拆分符号,把v1.act这类列名拆分为v1和act两部分- 最后的
rename步骤仅用来把拆分得到的act、fix列重命名为你需要的activation、fixation
如果需要更严谨的列名匹配,也可以用names_pattern参数传入正则表达式实现拆分,写法如下:
df %>% pivot_longer( cols = -id, names_to = c("variable", ".value"), names_pattern = "(v\\d)\\.(act|fix)" ) %>% rename(activation = act, fixation = fix)
内容的提问来源于stack exchange,提问作者Sol
相关产品推荐
相关产品推荐

