R语言如何不使用循环一次性根据因子生成多个数据集子集?
解决方案
报错原因说明
tapply的第一个参数要求是与分组向量等长的向量,你传入了整个数据框作为第一个参数,数据框的长度是列数,远小于xarxa列的行数,因此触发长度不匹配的报错,tapply本身不适合用来拆分数据框场景。
基础R最简实现
你要的无循环拆分可以直接用R内置的split()函数,这是专门用来按分组因子拆分数据集的函数:
# 拆分后得到包含3个子集的列表,列表名对应三个平台名称 insti_split <- split(insti, insti$xarxa)
如果需要直接生成三个独立的变量,不需要手动逐个赋值,再加一行代码即可:
# 将列表中的所有子集直接导入全局环境,自动生成linkedin、twitter、instagram三个变量 list2env(insti_split, envir = .GlobalEnv)
tidyverse生态实现(可选)
如果你习惯用tidyverse语法,可以用group_split()函数:
library(dplyr) insti_split <- insti %>% group_by(xarxa) %>% group_split(.keep = TRUE) # 给列表元素按平台命名 names(insti_split) <- levels(insti$xarxa)
内容的提问来源于stack exchange,提问作者Pau Clavell-Revelles
相关产品推荐
相关产品推荐

