tjmath
按你的描述,身为一个有责任心的Ruser我觉得必须阻止初学R的小伙伴误入歧途。
按你的描述写出来的代码是很危险的,楼上yihui 跟我之前都吐槽过了。我们来看看按你的思路的程序会有什么样的问题:
1. 循环产生大量变量充斥workspace,可读性差,难以维护
2. 数据难以再次利用。列数据的子集存入多个变量,难以保存,难以复用
所以不要这样做。
请在R里使用data.frame的数据结构进行工作,这样可以避免大部分问题。
最基本做到:在对数据操作的时候,想象成所有数据都储存在一张表里,每一个数据点(observation)为一行,由不同的列变量(variable)进行描述。
按你的描述,我觉得比较好的做法是做一个label列,作为该列数据的子集的标签。然后要使用每个子集的时候直接[
或filter取子集就行了。
举例:
df
a b label
1 1 1 groupA
2 2 2 groupA
3 3 3 groupA
4 4 4 groupA
5 5 5 groupA
6 6 6 groupB
7 7 7 groupB
8 8 8 groupB
9 9 9 groupB
10 10 10 groupB
取子集
df[df$label=="groupA"]
a b label
1 1 1 groupA
2 2 2 groupA
3 3 3 groupA
4 4 4 groupA
5 5 5 groupA
求每个子集的a列的和,b列的和,最大值,最小值,中位
library(dplyr)
a %>%
group_by(label) %>%
summarise(suma=sum(a),sumb=sum(b),maxa=max(a),minb=min(b),mediana=median(a))
label suma sumb maxa minb mediana
<chr> <int> <int> <dbl> <dbl> <int>
1 groupA 15 15 5 1 3
2 groupB 40 40 10 6 8