金山西安网站建设,国外做网站,微信与网站对接,广州通报: 广州通报(1) level表示额外的信息,包含向量中不同值的记录 x-c(5,12,13,12)xf-factor(x)xf
[1] 5 12 13 12
Levels: 5 12 13
#xf中不同数值(5,12,13)就是水平length(xf)
[1] 4
#因子的长度定义为数据的长度,而不是水平的长度#可以提前插入新的水平x-c(5,12,13,12)xf-factor(x)xf
[1] 5 12 13 12
Levels: 5 12 13
#xf中不同数值(5,12,13)就是水平length(xf)
[1] 4
#因子的长度定义为数据的长度,而不是水平的长度#可以提前插入新的水平x-c(5,12,13,12)xff-factor(x,levels c(5,12,13,88))xff
[1] 5 12 13 12
Levels: 5 12 13 88xff[2]-88xff
[1] 5 88 13 12
Levels: 5 12 13 88但是不能添加非法的水平xff[2]-28
Warning message:
In [-.factor(*tmp*, 2, value 28) : 因子层次有错产生了NA (2)tapply函数 ages-c(25,26,55,37,21,42)affils-c(R,D,D,R,U,D)tapply(ages,affils,mean)D R U
41 31 21
这里返回的是mean(u[x]),mean(u[y]),mean(u[z])#也可以使用自定义函数
x - c(1, 2, 3, 4, 5, 6)# 创建一个因子
f - factor(c(A, B, A, B, A, B))# 自定义函数计算每个子集的标准差
my_function - function(x) {return(sd(x))
}# 使用tapply应用自定义函数
result - tapply(x, f, my_function)
print(result)#输出A B
1.632993 1.632993 #多因子拆分x - c(1, 2, 3, 4, 5, 6)# 创建两个因子
f1 - factor(c(A, A, B, B, A, B))
f2 - factor(c(X, Y, X, Y, Y, X))# 使用tapply计算平均值
result - tapply(x, list(f1, f2), mean)
print(result)#输出X Y
A 3.0 5.0
B 4.5 4.03split函数
#根据因子拆分向量x - c(1, 2, 3, 4, 5, 6)# 创建一个因子
f - factor(c(A, B, A, B, A, B))# 使用 split() 函数拆分向量
result - split(x, f)
print(result)#输出
$A
[1] 1 3 5$B
[1] 2 4 6#根据向量拆分数据框
# 创建一个数据框
df - data.frame(x c(1, 2, 3, 4, 5, 6),y c(A, B, A, B, A, B)
)# 使用 split() 函数根据向量拆分数据框
result - split(df, df$y)
print(result)#输出
$Ax y
1 1 A
3 3 A
5 5 A$Bx y
2 2 B
4 4 B
6 6 B#根据自定义函数拆分向量x - c(1, 2, 3, 4, 5, 6)# 自定义函数根据奇偶性拆分向量
my_function - function(x) {ifelse(x %% 2 0, Even, Odd)
}# 使用 split() 函数根据自定义函数拆分向量
result - split(x, my_function(x))
print(result)#输出
$Odd
[1] 1 3 5$Even
[1] 2 4 64by()函数 by(data, INDICES, FUN, ...) data要拆分的数据框、列表或向量。INDICES用于拆分数据的因子、列表或向量。FUN要应用于每个子集的函数。...传递给函数 FUN 的其他参数。 #对数据框的列进行拆分和求和
# 创建一个数据框
df - data.frame(group rep(c(A, B, C), each 3),value 1:9
)# 使用 by() 函数对数据框的 value 列按照 group 列进行拆分和求和
result - by(df$value, df$group, sum)
print(result)#输出
df$group: A
[1] 6
------------------------------------------------------------
df$group: B
[1] 15
------------------------------------------------------------
df$group: C
[1] 24#对列表中的元素进行拆分和求平均值list_data - list(A c(1, 2, 3),B c(4, 5, 6),C c(7, 8, 9)
)# 使用 by() 函数对列表中的元素进行拆分和求平均值
result - by(list_data, names(list_data), mean)
print(result)
#输出
names(list_data): A
[1] 2
------------------------------------------------------------
names(list_data): B
[1] 5
------------------------------------------------------------
names(list_data): C
[1] 8#对向量进行拆分和自定义操作
# 创建一个向量
x - c(1, 2, 3, 4, 5, 6)# 创建一个因子
f - factor(c(A, B, A, B, A, B))# 自定义函数计算每个子集的中位数
my_function - function(x) {return(median(x))
}# 使用 by() 函数对向量按照因子进行拆分和计算中位数
result - by(x, f, my_function)
print(result)#输出
f: A
[1] 2------------------------------------------------------------
f: B
[1] 45表的操作 u-c(22,8,33,6,8,29,-2)f1-list(c(5,12,13,12,13,5,13),c(a,bc,a,a,bc,a,a))tapply(u,f1,length)a bc
5 2 NA
12 1 1
#根据以上学习的tapply,得到的分组如下,但是事实上NA应该为0,因为没有第一因子是5,第二银子为bc的例子
所以应该用table()建表table(f1)f1.2
f1.1 a bc5 2 012 1 113 2 1
#这里计算的是频数#这里用一维的频数理解一下table(c(5,12,13,12,8,5))5 8 12 13 2 1 2 1 #也可以建立三维表gender-c(M,M,F,M,F,F)race-c(W,W,A,O,B,B)pol-c(L,L,C,L,L,C)v-data.frame(gender,race,pol)vgender race pol
1 M W L
2 M W L
3 F A C
4 M O L
5 F B L
6 F B Cvt-table(v)vt
, , pol Crace
gender A B O WF 1 1 0 0M 0 0 0 0, , pol Lrace
gender A B O WF 0 1 0 0M 0 0 1 26对表的矩阵操作 ct-read.table(D://ct.dat,headerT)ctVote.for.X Voted.For.X.Last.Time
1 YES YES
2 YES NO
3 NO NO
4 Not Sure YES
5 NO NOcttab-table(ct)cttabVoted.For.X.Last.Time
Vote.for.X NO YESNO 2 0Not Sure 0 1YES 1 1#在R中我们还是把表当作矩阵进行处理class(cttab)
[1] tablecttab[1,1]
[1] 2NO YES 2 0 #与标量进行运算cttab/5Voted.For.X.Last.Time
Vote.for.X NO YESNO 0.4 0.0Not Sure 0.0 0.2YES 0.2 0.2#以下为Vote.for.X变量的边际值202011112apply(cttab,1,sum)NO Not Sure YES 2 1 2 #实际上可以用addmargins()解决边际值问题addmargins(cttab)Voted.For.X.Last.Time
Vote.for.X NO YES SumNO 2 0 2Not Sure 0 1 1YES 1 1 2Sum 3 2 5#这样可以得到一个二维的边际数据#dimnames可以得到边际值的名称和水平值dimnames(cttab)
$Vote.for.X
[1] NO Not Sure YES $Voted.For.X.Last.Time
[1] NO YES7aggregate()函数 用于按照指定的因子变量对数据进行分组并对每个组应用一个函数进行聚合操作 aggregate(formula, data, FUN, ...) formula 是一个公式对象用于定义要聚合的变量和分组的因子变量。data 是一个数据框或数据集包含要聚合的数据。FUN 是一个函数用于指定要应用于每个分组的聚合操作。常见的函数有sum、mean、median、max、min等。 df - data.frame(group c(A, A, B, B, C, C),value c(10, 15, 5, 8, 20, 25)
)# 使用aggregate函数计算平均值
result - aggregate(value ~ group, data df, FUN mean)
#计算每一组因子的平均值resultgroup value
1 A 12.5
2 B 6.5
3 C 22.58cut()函数 cut()函数用于将连续型的数值变量划分为离散的区间 cut(x, breaks, labels NULL, include.lowest FALSE, right TRUE, dig.lab 3, ...)\ x 是要进行切分的数值变量。breaks 是用于指定区间的断点。可以有多种不同的方式来指定断点例如一个整数表示分割成等宽的区间、一个向量表示自定义的断点、一个数值表示分割的区间个数等。labels 是可选参数用于指定每个区间的标签。如果未指定则默认使用区间的范围作为标签。 当labels FALSE时切分后的区间将使用数字表示。例如如果将数值变量划分为3个区间那么第一个区间将表示为1第二个区间表示为2以此类推。 当labels TRUE时切分后的区间将使用字符型的标签表示。默认情况下将使用区间的范围作为标签。例如如果将数值变量划分为三个区间范围分别为(0, 30]、(30, 60]和(60, 100]则标签分别为(0, 30]、(30, 60]和(60, 100]。 include.lowest 是一个逻辑值TRUE或FALSE表示是否包括最小值在内的左端点。right 是一个逻辑值用于指定区间是否是右开的。dig.lab 是一个整数表示标签的小数位数。 values - c(10, 20, 30, 40, 50, 60, 70)# 使用cut函数进行切分
cut_values - cut(values, breaks c(0, 30, 60, 100))print(cut_values)
[1] (0,30] (0,30] (0,30] (30,60] (30,60] (30,60] (60,100]
Levels: (0,30] (30,60] (60,100] z-c(0.88,0.28,0.58,0.42,0.46,0.24,0.0528,0.88)z-c(0.88,0.28,0.58,0.42,0.46,0.24,0.0528,0.88035)seq(from0.0,to1.0,by0.1)[1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0binmarks-seq(from0.0,to1.0,by0.1)cut(z,binmarks,labels F)
[1] 9 3 6 5 5 3 1 9
#例如z[1],0.88落在第九个区间,即(0.0,0.1]