如何用R的tidyverse补全缺失水果类别并设置数量为0?
使用tidyverse补全指定用户的缺失水果类别
解决方案代码
以下是精准匹配需求的实现代码:
# 加载tidyverse工具包 library(tidyverse) # 读取CSV文件,保留Qty的字符格式以维持前导零(如"09") df <- read_csv("your_file.csv", col_types = cols(Qty = col_character())) # 定义需要补充的缺失行 additional_entries <- tribble( ~Name, ~Fruit, ~Qty, "Wikfae", "Pear", "0", "Moigaw", "Apple", "0" ) # 合并原数据与补充行,按Name排序匹配示例输出 final_df <- df %>% bind_rows(additional_entries) %>% arrange(Name) # 查看处理结果 final_df # 可选:将结果保存为新CSV文件 write_csv(final_df, "completed_data.csv")
关键说明
- 保留前导零:原数据中
Qty列包含"09"这类带前导零的内容,通过col_types = cols(Qty = col_character())指定读取为字符型,避免自动转为数值型丢失前导零。若无需保留前导零,可删除该参数,补充行的Qty设为数值0即可。 - 精准补全:通过
tribble()手动构建需要补充的行,仅为指定用户添加缺失的水果类别,不会改动其他用户的原有数据。 - 排序对齐示例:使用
arrange(Name)让结果按用户名排序,与你提供的期望输出顺序一致。
通用补全方案(可选)
如果后续需要为所有用户补全所有存在的水果类别(比如每个用户都要有Apple和Pear),可以用complete()函数一键生成所有组合并填充缺失值:
df %>% complete(Name, Fruit, fill = list(Qty = "0"))
注意:该方案会为Tauwen补充Pear、为Tauewn补充Apple,若不需要此效果,请使用前面的精准补全方案。
内容的提问来源于stack exchange,提问作者Ginko-Mitten
相关产品推荐
相关产品推荐

