基于因子变量的数据集子设置,该因子变量生成与因子长度一样多的子集

Posted

技术标签:

【中文标题】基于因子变量的数据集子设置,该因子变量生成与因子长度一样多的子集【英文标题】:Dataset sub-setting based on a factor variable that generates as many subsets as the factor length 【发布时间】:2018-12-28 19:45:18 【问题描述】:

我正在处理一个数据集(名为“scores”),它只包含数字变量,但也包含一个表示数字来自国家/地区的因素。所有这些都是一个数据集中的列。

让我用于子集化的部分代码更加独立,这让我很困惑。例如,在数据集“分数”中,我使用以下内容为每个国家/地区生成一个子集:

scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]

我需要做的是让这部分更加独立,这样当不熟悉 R 的人为不同的国家/地区运行它时,不必总是为每个级别的因素写一行。

也许是一个循环通过因子并创建与其级别一样多的子集?

非常感谢您的任何想法。

P.s 我尝试使用 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 %&gt;% group_by(Country) %&gt;% lapply(., nps)

如果nps 有一种方法可以处理split 生成的数据框列表,那正是我正在寻找的。​​p>

再次感谢。

【问题讨论】:

【参考方案1】:

我们可以使用split 拆分为data.frames 的list(假设'scores_df' 和'scores' 具有相同的维度)

lst1 <- split(scores_df, scores$Country)

【讨论】:

非常感谢,是的 scores_df 和 scores 是同一个数据集。这是一个错字!已经编辑了我的帖子以避免混淆。我会试试这个。 谢谢,它有效!但是,现在如果我想使用拆分生成的子集,我想我需要执行这篇文章中提出的建议:***.com/questions/17905463/…。对?在这种情况下,我再次无法避免为“国家”因素的每个级别编写一行代码。也许,我想要做的事情是不可能的。例如,现在如果我尝试在“lst1”上应用一个函数,它会以错误结束。 @Y.Ch 您的最终目标尚不清楚。如果要通过'Country'对其他列进行一些计算,可以通过groupby操作来完成。即scores_df %&gt;% group_by(Country) %&gt;% summarise(Valmean = mean(col)) 否则,要在lists 上工作,请使用lapply/sapplylapply(lst1, function(x) mean(x$Col)) 非常感谢您的回复,确实不是很清楚。我已经更新了回复您评论的初始帖子,因为这将是一个很长的评论。如果你有时间检查更新。干杯。 该死的你让它工作了。感谢这个答案,其他人在***上发布了类似的问题,但我敢打赌这是第一个完整的答案。再次感谢!

以上是关于基于因子变量的数据集子设置,该因子变量生成与因子长度一样多的子集的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用dplyr包基于因子变量(factor)将原dataframe拆分为每一个因子对应的单独数据集dataframe实战

主成分分析,聚类分析,因子分析的基本思想以及他们各自的优缺点。

R语言应用实战-基于R的因子分析(以上市公司数据为例)

SPSS+因子分析

为啥R中的回归会删除因子变量的索引1? [复制]

R语言使用car包的vif函数计算方差膨胀因子,并基于方差膨胀因子开方后和阈值的判断来确认模型特征(预测变量)之间是否存在多重共线性(Multicollinearity)