如何用lapply结合grep()按ID处理RawDat数据框生成新数据框
嘿,这个场景太懂了!手动重复75次grep再cbind简直是浪费时间,用lapply完全可以优雅解决,给你两种简单的实现方式:
方法一:用lapply遍历唯一ID提取数据
先拿到所有不重复的ID,再用lapply逐个提取对应的数据,最后转成数据框就行:
# 获取所有唯一ID unique_ids <- unique(RawDat$ID) # 遍历每个ID,提取对应的data列 data_list <- lapply(unique_ids, function(current_id) { # 筛选当前ID对应的data值 RawDat$data[RawDat$ID == current_id] }) # 把列表转成数据框,并给列命名为对应的ID ExtRawDat <- as.data.frame(data_list) names(ExtRawDat) <- unique_ids
方法二:用split配合as.data.frame(更简洁)
split函数可以直接按ID对data列分组,返回的列表直接转成数据框就是你要的格式:
# 一步到位:按ID拆分data,转成数据框 ExtRawDat <- as.data.frame(split(RawDat$data, RawDat$ID))
两种方法都能自动把每个ID对应的数据变成一列,不用手动重复操作。要是不同ID的行数不一样,R会自动用NA补全缺失的行,这是默认行为,要是有特殊需求可以再调整~
内容的提问来源于stack exchange,提问作者Rnewbie
相关产品推荐
相关产品推荐

