如何用tidyverse清空数据集值并保留变量属性?
保留变量类型的空白数据集创建方法
Tidyverse 方案
方法1:通过索引生成对应类型的NA
这是最简洁的tidyverse实现方式,利用向量索引直接生成与原变量类型匹配的NA值,同时因子变量会保留原有的水平:
library(dplyr) library(tibble) df <- data.frame(x = rnorm(5), y = factor(letters[5:1]), z = c(1:2, NA, 4:5)) # 创建空白数据集 blankDF <- df %>% mutate(across(everything(), ~ .x[NA])) # 查看结果 glimpse(blankDF)
输出结果:
Rows: 5 Columns: 3 $ x <dbl> NA, NA, NA, NA, NA $ y <fct> NA, NA, NA, NA, NA $ z <int> NA, NA, NA, NA, NA
方法2:借助vctrs包进行类型匹配
如果需要更明确的类型控制,可以使用vctrs::vec_cast()将NA转换为与原变量一致的类型:
library(dplyr) library(vctrs) library(tibble) blankDF <- df %>% mutate(across(everything(), ~ vec_cast(NA, .x))) glimpse(blankDF)
这个方法同样会保留所有变量的原始类型,包括因子的水平属性。
Base R 方案
如果不依赖tidyverse,也可以用base R的方式实现:
df <- data.frame(x = rnorm(5), y = factor(letters[5:1]), z = c(1:2, NA, 4:5)) blankDF <- df blankDF[] <- lapply(blankDF, function(col) col[NA]) str(blankDF)
输出结果:
'data.frame': 5 obs. of 3 variables: $ x: num NA NA NA NA NA $ y: Factor w/ 5 levels "a","b","c","d",..: NA NA NA NA NA $ z: int NA NA NA NA NA
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

