使用tidyr、dplyr按Store分组填充flavor列不生效原因求解
问题原因
tidyr包的fill()函数默认只会填充R中标准的缺失值NA,你数据里的N/A是字符串类型的普通取值,不属于fill()识别的缺失值范围,所以不会触发填充逻辑。
解决方法
步骤1:将字符串"N/A"转换为真正的NA值
你可以根据自己的场景选择任意一种转换方式:
# 方法1:构造数据框时直接转换 df <- data.frame(Store, Main_or_branch, flavor, na.strings = "N/A", stringsAsFactors = FALSE) # 方法2:对已有数据框做列转换 library(dplyr) df <- df %>% mutate(flavor = ifelse(flavor == "N/A", NA, flavor))
步骤2:执行分组填充操作
library(tidyr) df_filled <- df %>% group_by(Store) %>% fill(flavor, .direction = "down")
填充后输出结果
# A tibble: 6 × 3 # Groups: Store [3] Store Main_or_branch flavor <chr> <chr> <chr> 1 A main chocolate 2 A Branch chocolate 3 A Branch chocolate 4 B main vanilla 5 C main strawberry 6 C Branch strawberry
注意事项
- 如果数据是从csv等外部文件读入的,在读入阶段加
na.strings = "N/A"参数可以一步把所有"N/A"识别为NA,无需后续额外转换 fill()默认填充方向为从上到下,如果分组内的有效值在下方,可将.direction参数设为up实现从下往上填充
内容的提问来源于stack exchange,提问作者Stacy
相关产品推荐
相关产品推荐

