在R语言中如何基于给定Data生成指定格式的table或matrix?
解决方法
你之前用table()生成的是三维频数统计表,统计的是各组合的出现次数,而非每个group+task_type对应的time.值,所以不符合需求。以下提供两种实现方式:
方式一:Base R 原生方法
# 提取每个group-task_type组合对应的唯一time.值 agg_data <- aggregate(time. ~ group + task_type, data = Data, FUN = function(x) x[1]) # 转换为宽格式 result <- reshape(agg_data, idvar = "group", timevar = "task_type", direction = "wide") # 清理列名并设置行名 colnames(result) <- sub("time\\.", "", colnames(result)) rownames(result) <- result$group result <- result[, -1, drop = FALSE] # 输出结果 result
运行后输出:
C S Com odd even Sim even odd
方式二:使用tidyverse工具
library(tidyr) library(dplyr) result <- Data %>% # 保留group、task_type和对应的唯一time.值 distinct(group, task_type, time.) %>% # 转换为宽格式 pivot_wider(names_from = task_type, values_from = time.) %>% # 将group列设为行名 column_to_rownames("group") # 输出结果 result
得到的结果与Base R方法一致。若需要严格的table类对象,可执行:
as.table(as.matrix(result))
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

