R语言如何将单列类别重排为多列,统计每个物种对应类别存在情况
R实现物种类别覆盖统计的方法
方法1:tidyverse套件实现(代码简洁易读)
先加载依赖包,再做数据转换:
# 加载tidyverse(含dplyr、tidyr) library(tidyverse) # 构造你的原始数据表(如果已经有数据可跳过这步) df <- tibble( A = c("a", "a", "a", "a2", "a3"), B = c("b'", "b'", "b''", "b1", "b2"), C = c(1, 2, 3, 1, 3) ) # 转换为目标格式 res <- df %>% mutate(val = "+") %>% pivot_wider( id_cols = c(A, B), names_from = C, names_prefix = "C", values_from = val, values_fill = "-" )
执行后打印res即可得到你需要的结果。
方法2:基础R实现(无需安装第三方包)
# 构造原始数据表(已有数据可跳过) df <- data.frame( A = c("a", "a", "a", "a2", "a3"), B = c("b'", "b'", "b''", "b1", "b2"), C = c(1, 2, 3, 1, 3), stringsAsFactors = FALSE ) # 生成交叉表并替换为+-标记 ct <- table(df$B, df$C) ct[ct > 0] <- "+" ct[ct == 0] <- "-" # 匹配属名列合并结果 ab_map <- unique(df[, c("A", "B")]) res <- cbind(ab_map, ct[match(ab_map$B, rownames(ct)), ]) colnames(res) <- c("A", "B", paste0("C", colnames(res)[-c(1,2)]))
两种方法都会自动适配C列的所有类别,不需要手动指定类别范围。
内容的提问来源于stack exchange,提问作者Ilya Putilin
相关产品推荐
相关产品推荐

