1

我正在研究一个数据集(名为“分数”),它只包含数字变量,但还有一个因素表明数字来自哪个国家。所有这些都是一个数据集中的列。

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

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将正是我正在寻找的。

再次感谢。

4

1 回答 1

2

我们可以使用splitto split into a listof data.frames(假设 'scores_df' 和 'scores' 具有相同的维度)

lst1 <- split(scores_df, scores$Country)
于 2018-12-28T19:46:05.923 回答