我正在研究一个数据集(名为“分数”),它只包含数字变量,但还有一个因素表明数字来自哪个国家。所有这些都是一个数据集中的列。
我对使用于子集化的代码部分更加独立感到困惑。例如,在数据集“分数”中,我使用以下内容为每个国家/地区生成一个子集:
scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]
我需要做的是让这部分更加独立,这样当不熟悉 R 的人为不同的国家组运行它时,不必总是为每个级别的因素写一行。
也许是一个循环通过因子并创建与其级别一样多的子集?
非常感谢您的任何想法。
Ps 我尝试使用for i in length(scores$Country)
,但它返回一个包含所有国家的子集,而不是三个。
更新的问题:
你是对的,我一直很不清楚。我的数据集是 1-10 分(意见/看法),代表一组国家的序数数据。我的下一步是为每个国家/地区的所有列计算“NPS- 净推荐值”。到目前为止,我对每个国家/地区进行了子集化,然后对每个国家/地区应用 nps 函数(nps 包),这会产生一个新列表,其中包含每个问题的 NPS 编号(分数列)。执行此操作的代码示例是:
scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]
nps_us<-round(sapply(scores_us, nps)*100)
nps_uk<-round(sapply(scores_uk, nps)*100)
nps_it<-round(sapply(scores_it, nps)*100)
您提出的split
方法无需用户为每个国家/地区编写一行代码即可实现子集化。它生成一个数据框列表。但是,当使用 sapply/lapply 计算 nps 时,它会返回警告:Data of class data.frame provided; 转换为数字,元素是 NA。
也许是因为输出列表的维度与列出的数据框 (lst1) 不同?还是因为 nps 不适用于 apply 系列?
您替代 group_by 然后执行 nps 函数会返回 nps 结果,但不执行每个国家/地区的。这就是我用来做的:scores_df %>% group_by(Country) %>% lapply(., nps)
。
如果有一种方法可以nps
处理生成的数据框列表,那split
将正是我正在寻找的。
再次感谢。