R语言中数据的分层预测效果

split函数

函数split()可以按照分组因子,把向量,矩阵和数据框进行适当的分组。它的返回值是一个列表,代表分组变量每个水平的观测。这个列表可以使用sapply(),lappy()进行处理(apply – combine步骤),得到问题的最终结果。

    split( )的基本用法是:group <- split(X,f)

    其中X 是待分组的向量,矩阵或数据框。f是分组因子。

##例1:对向量分组

> library(MASS)

#使用Cars93数据集,利用其中的Origin变量(两个水平),对Price变量分组

> g<-split(Cars93$Price,Cars93$Origin)

 

#分组结果是个列表:

$USA

 [1] 15.7 20.8 23.7 26.3 34.7 40.1 13.4 11.4 15.1 15.9 16.3 16.6 18.8 38.0

[15] 18.4 15.8 29.5 9.2 11.3 13.3 19.0 15.6 25.8 12.2 19.3 7.4 10.1 11.3

[29] 15.9 14.0 19.9 20.2 20.9 34.3 36.1 14.1 14.9 13.5 16.3 19.5 20.7 14.4

[43] 9.0 11.1 17.7 18.5 24.4 11.1

$`non-USA`

 [1] 15.9 33.9 29.1 37.7 30.0 8.4 12.5 19.8 12.1 17.5 8.0 10.0 10.0 13.9

[15] 47.9 28.0 35.2 8.3 11.6 16.5 19.1 32.5 31.9 61.9 10.3 26.1 11.8 15.7

[29] 19.1 21.5 28.7 8.4 10.9 19.5 8.6 9.8 18.4 18.2 22.7 9.1 19.7 20.0

[43] 23.3 22.7 26.7

#计算组的长度和组内均值

> sapply(g,length)

    USA non-USA

     48 45

> sapply(g,mean)

     USA non-USA

18.57292 20.50889

#用lapply也可以,返回值是列表

> lapply(g,mean)

$USA

[1] 18.57292

$`non-USA`

[1] 20.50889

#例2:对矩阵分组(按列)

> m<-cbind(x=1:10,y=11:20)

> split(m,col(m))

$`1`

 [1] 1 2 3 4 5 6 7 8 9 10

$`2`

 [1] 11 12 13 14 15 16 17 18 19 20

 

 

##例3:对数据框进行分组

#还是利用Cars93,它就是个数据框

g<-split(Cars93,Cars93$Origin)

#分组结果

> summary(g)

        Length Class Mode

USA 27 data.frame list

non-USA 27 data.frame list

split还有一个逆函数,unsplit,可以让分组完好如初。

在base包里和split功能接近的函数有cut(对属性数据分划),strsplit(对字符串分划)以及

subset(对向量,矩阵或数据框按给定条件取子集)等。

 

 

 

subset函数

subset()R语言中的函数用于创建 DataFrame 的子集。这也可用于从 DataFrame 中删除列。

用法: subset(df, expr)参数:

df:使用的 DataFrame

expr:子集的条件

范例1:

# R program to create 

# subset of a data frame

# Creating a Data Frame 

df<-data.frame(row1 = 0:2, row2 = 3:5, row3 = 6:8) 

print ("Original Data Frame") 

print (df) 

    

# Creating a Subset 

df1<-subset(df, select = row2) 

print("Modified Data Frame") 

print(df1) 

输出:

[1] "Original Data Frame"

  row1 row2 row3

1 0 3 6

2 1 4 7

3 2 5 8

[1] "Modified Data Frame"

  row2

1 3

2 4

3 5

在这里,在上面的代码中,原始数据帧保持不变,同时创建了另一个数据帧子集,其中包含从原始数据帧中选择的行。

范例2:

# R program to create 

# subset of a data frame

    

# Creating a Data Frame 

df<-data.frame(row1 = 0:2, row2 = 3:5, row3 = 6:8) 

print ("Original Data Frame") 

print (df) 

    

# Creating a Subset 

df<-subset(df, select = -c(row2, row3))

print("Modified Data Frame") 

print(df) 

输出:

[1] "Original Data Frame"

  row1 row2 row3

1 0 3 6

2 1 4 7

3 2 5 8

[1] "Modified Data Frame"

  row1

1 0

2 1

3 2

在这里,在上面的代码中,行从原始 DataFrame 中永久删除。

转载自https://site.douban.com/182577/widget/notes/10567181/note/245088040/#:~:text=%E5%9C%A8R%E5%BD%93%E4%B8%AD%EF%BC%8Csplit%E8%BF%99%E4%B8%AA%E6%AD%A5%E9%AA%A4%E6%98%AF%E7%94%B1split%20%28%20%29%2Csubset%20%28%20%29%E7%AD%89%E7%AD%89%E5%87%BD%E6%95%B0%E5%AE%8C%E6%88%90%E7%9A%84%E3%80%82,%E4%B8%8B%E9%9D%A2%E4%B8%BB%E8%A6%81%E4%BB%8B%E7%BB%8Dsplit%E8%BF%99%E4%B8%AA%E5%87%BD%E6%95%B0%E3%80%82%20%E5%87%BD%E6%95%B0split%EF%BC%88%EF%BC%89%E5%8F%AF%E4%BB%A5%E6%8C%89%E7%85%A7%E5%88%86%E7%BB%84%E5%9B%A0%E5%AD%90%EF%BC%8C%E6%8A%8A%E5%90%91%E9%87%8F%EF%BC%8C%E7%9F%A9%E9%98%B5%E5%92%8C%E6%95%B0%E6%8D%AE%E6%A1%86%E8%BF%9B%E8%A1%8C%E9%80%82%E5%BD%93%E7%9A%84%E5%88%86%E7%BB%84%E3%80%82%20%E5%AE%83%E7%9A%84%E8%BF%94%E5%9B%9E%E5%80%BC%E6%98%AF%E4%B8%80%E4%B8%AA%E5%88%97%E8%A1%A8%EF%BC%8C%E4%BB%A3%E8%A1%A8%E5%88%86%E7%BB%84%E5%8F%98%E9%87%8F%E6%AF%8F%E4%B8%AA%E6%B0%B4%E5%B9%B3%E7%9A%84%E8%A7%82%E6%B5%8B%E3%80%82%20%E8%BF%99%E4%B8%AA%E5%88%97%E8%A1%A8%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8sapply%EF%BC%88%EF%BC%89%2Clappy%EF%BC%88%EF%BC%89%E8%BF%9B%E8%A1%8C%E5%A4%84%E7%90%86%EF%BC%88apply%20%E2%80%93%20combine%E6%AD%A5%E9%AA%A4%EF%BC%89%EF%BC%8C%E5%BE%97%E5%88%B0%E9%97%AE%E9%A2%98%E7%9A%84%E6%9C%80%E7%BB%88%E7%BB%93%E6%9E%9C%E3%80%82

 

https://vimsky.com/examples/usage/create-subsets-of-a-data-frame-in-r-programming-subset-function.html#:~:text=subset%20%28%29%20R%E8%AF%AD%E8%A8%80%E4%B8%AD%E7%9A%84%E5%87%BD%E6%95%B0%E7%94%A8%E4%BA%8E%E5%88%9B%E5%BB%BA%20DataFrame,%E7%9A%84%E5%AD%90%E9%9B%86%E3%80%82%20%E8%BF%99%E4%B9%9F%E5%8F%AF%E7%94%A8%E4%BA%8E%E4%BB%8E%20DataFrame%20%E4%B8%AD%E5%88%A0%E9%99%A4%E5%88%97%E3%80%82%20%E5%9C%A8%E8%BF%99%E9%87%8C%EF%BC%8C%E5%9C%A8%E4%B8%8A%E9%9D%A2%E7%9A%84%E4%BB%A3%E7%A0%81%E4%B8%AD%EF%BC%8C%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE%E5%B8%A7%E4%BF%9D%E6%8C%81%E4%B8%8D%E5%8F%98%EF%BC%8C%E5%90%8C%E6%97%B6%E5%88%9B%E5%BB%BA%E4%BA%86%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%B8%A7%E5%AD%90%E9%9B%86%EF%BC%8C%E5%85%B6%E4%B8%AD%E5%8C%85%E5%90%AB%E4%BB%8E%E5%8E%9F%E5%A7%8B%E6%95%B0%E6%8D%AE%E5%B8%A7%E4%B8%AD%E9%80%89%E6%8B%A9%E7%9A%84%E8%A1%8C%E3%80%82

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值