R语言处理tibble:相邻观测配对为新行及类型合并报错解决
错误原因
报错的核心是pivot_longer参数传递错误:tidyr 1.0.0之后的pivot_longer第一个必填参数是cols(指定要拉长的列),你没有显式标注cols = x1:x3,导致x1:x3被传给了后面的非位置参数,函数默认把所有列(包括整数类型的id列y)都进行拉长操作,字符列和整数列合并到同一个val列时触发类型冲突报错。你原本的实现逻辑是正确的,只需要修正参数写法即可。
修正后的实现代码
首先补全你缺失的y定义,保证示例可复现:
library(tidyverse) # 补全id列y的定义 y <- 1:10 x1 <- c("cook", "clean", "wash", "walk", "wish", "broom", "clean", "wash", "walk", "cook") x2 <- c("move", "climb", "skate", "ball", "climb", "jog", "job", "skate", "ball", "climb") x3 <- c("try", "clean", "boom", "walk", "bring", "broom", "sing", "wash", "jump", "fly") df <- tibble(y, x1, x2, x3)
修正后的处理代码,仅需给pivot_longer显式指定cols参数:
df %>% pivot_longer(cols = x1:x3, names_to = "obs", values_to = "val") %>% group_by(y) %>% mutate(x1 = val, x2 = lead(val)) %>% filter(!is.na(x2)) %>% select(y, x1, x2)
输出效果示例
运行后得到的结果完全符合预期,前4行如下:
# A tibble: 20 × 3 # Groups: y [10] y x1 x2 <int> <chr> <chr> 1 1 cook move 2 1 move try 3 2 clean climb 4 2 climb clean
内容的提问来源于stack exchange,提问作者Researchderp
相关产品推荐
相关产品推荐

