使用dplyr的pivot_longer转置站点经纬度数据集遇错求助
解决方案
你的错误在于误用了pivot_longer的names_to参数——这个参数用于拆分列名生成多列,但你的列名是站点A-E,并不包含lat/lon信息,所以触发了报错。
正确的处理逻辑是先把站点列转成长格式,再将lat/lon转为宽格式,具体代码如下:
library(tidyverse) df <- data.frame( sites = c("lat", "lon"), A = c(10, 20), B = c(12, 18), C = c(14, 17), D = c(21, 12), E = c(3, 23)) %>% # 先将A-E列转成站点名+对应值的长格式 pivot_longer(cols = -sites, names_to = "site", values_to = "value") %>% # 再将lat/lon从行转成单独的列 pivot_wider(names_from = sites, values_from = value)
运行后得到的结果就是你需要的结构:
# A tibble: 5 × 3 site lat lon <chr> <dbl> <dbl> 1 A 10 20 2 B 12 18 3 C 14 17 4 D 21 12 5 E 3 23
如果你习惯用基础R,也可以用转置的方式实现:
# 基础R转置方案 df_transposed <- as.data.frame(t(df[-1])) colnames(df_transposed) <- df$sites df_transposed$site <- rownames(df_transposed) df_transposed <- df_transposed[, c("site", "lat", "lon")] rownames(df_transposed) <- NULL
内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

