基于因子变量的数据集子设置,该因子变量生成与因子长度一样多的子集
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 %>% group_by(Country) %>% lapply(., nps)
。
如果nps
有一种方法可以处理split
生成的数据框列表,那正是我正在寻找的。p>
再次感谢。
【问题讨论】:
【参考方案1】:我们可以使用split
拆分为data.frame
s 的list
(假设'scores_df' 和'scores' 具有相同的维度)
lst1 <- split(scores_df, scores$Country)
【讨论】:
非常感谢,是的 scores_df 和 scores 是同一个数据集。这是一个错字!已经编辑了我的帖子以避免混淆。我会试试这个。 谢谢,它有效!但是,现在如果我想使用拆分生成的子集,我想我需要执行这篇文章中提出的建议:***.com/questions/17905463/…。对?在这种情况下,我再次无法避免为“国家”因素的每个级别编写一行代码。也许,我想要做的事情是不可能的。例如,现在如果我尝试在“lst1”上应用一个函数,它会以错误结束。 @Y.Ch 您的最终目标尚不清楚。如果要通过'Country'对其他列进行一些计算,可以通过groupby操作来完成。即scores_df %>% group_by(Country) %>% summarise(Valmean = mean(col))
否则,要在list
s 上工作,请使用lapply/sapply
即lapply(lst1, function(x) mean(x$Col))
非常感谢您的回复,确实不是很清楚。我已经更新了回复您评论的初始帖子,因为这将是一个很长的评论。如果你有时间检查更新。干杯。
该死的你让它工作了。感谢这个答案,其他人在***上发布了类似的问题,但我敢打赌这是第一个完整的答案。再次感谢!以上是关于基于因子变量的数据集子设置,该因子变量生成与因子长度一样多的子集的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用dplyr包基于因子变量(factor)将原dataframe拆分为每一个因子对应的单独数据集dataframe实战
主成分分析,聚类分析,因子分析的基本思想以及他们各自的优缺点。
R语言使用car包的vif函数计算方差膨胀因子,并基于方差膨胀因子开方后和阈值的判断来确认模型特征(预测变量)之间是否存在多重共线性(Multicollinearity)