我正在处理一个数据集(名为“分数”),该数据集仅包含数字变量,但还包含一个指示数字来源国的因素。所有这些都是一个数据集中的列。
我对使用于子集的代码部分更加独立感到困惑。例如,在数据集“分数”中,我使用以下代码为每个国家/地区生成子集:
scores_us <- scores[which(scores$Country== 1)]
scores_uk <- scores[which(scores$Country== 2)]
scores_it <- scores[which(scores$Country== 3)]
我需要做的是使这一部分更加独立,这样,当不熟悉R的人在不同的国家/地区组中运行它时,不必总是为因子的每个级别写一行。 / p>
也许是一个遍历该因子并仅创建与其水平一样多的子集的循环?
非常感谢您提出任何想法。
我尝试使用for i in length(scores$Country)
的PS,但是它返回的是所有国家/地区而不是三个国家/地区的一个子集。
更新的问题:
您是对的,我不清楚。我的数据集的得分为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时,它会返回警告:提供了class data.frame类的数据;转换为数字且元素为NA。
也许是因为输出列表的尺寸与列出的数据帧(lst1)不同?还是因为nps不适用于应征家庭?
您可以替代group_by,然后执行nps函数返回nps结果
但没有做每个国家的事。这就是我用来做的:scores_df %>% group_by(Country) %>% lapply(., nps)
。
如果nps
可以在split
生成的数据帧列表上工作,那正是我在寻找的东西。
再次感谢。
答案 0 :(得分:1)
我们可以使用split
拆分成list
个data.frame
(假设'scores_df'和'scores'具有相同的尺寸)
lst1 <- split(scores_df, scores$Country)