R语言利用setdiff函数进行自定义数据构造

R语言基础函数中有一个sets集合元素集合,里面包含有各种集合元素,下面我们举个例子来介绍,假设有两个数列x和y

set.seed(123)
(x <- c(sort(sample(1:20, 9)), NA))
##  [1]  2  3  5  6 10 11 14 15 19 NA
(y <- c(sort(sample(3:23, 7)), NA))
## [1]  5  7 10 11 12 16 22 NA

union函数就是把两个数列合并

union(x, y)
##  [1]  2  3  5  6 10 11 14 15 19 NA  7 12 16 22

intersect函数就是取两个数列的交集

intersect(x, y)
## [1]  5 10 11 NA

setdiff函数就是求数列减去交集的这部分,注意一下setdiff(x, y)和setdiff(y, x)是不同的.setdiff(x, y)是x数列减去x数列和y数列交集的部分。

setdiff(x, y)
## [1]  2  3  6 14 15 19
setdiff(y, x)
## [1]  7 12 16 22

setequal函数是判断x和y这两个数据集是否完全一样

setequal(x, y)
## [1] FALSE

我们今天主要来介绍一下setdiff函数,利用这个函数的减法功能,可以在设计函数中有些用途,我们先导入我们的早产数据看一下变量名。

bc<-read.csv("E:/r/test/zaochan.csv",sep=',',header=TRUE)
dput(names(bc))
## c("id", "low", "age", "lwt", "race", "smoke", "ptl", "ht", "ui", 
## "ftv", "bwt")

我们先看一下bc的数据结构

head(bc,6)
##   id low age lwt  race     smoke ptl ht ui ftv  bwt
## 1 85   0  19 182 black nonsmoker   0  0  1   0 2523
## 2 86   0  33 155 other nonsmoker   0  0  0   3 2551
## 3 87   0  20 105 white    smoker   0  0  0   1 2557
## 4 88   0  21 108 white    smoker   0  0  1   2 2594
## 5 89   0  18 107 white    smoker   0  0  1   0 2600
## 6 91   0  21 124 other nonsmoker   0  0  0   0 2622

假设x和y分布是两个字符串向量

x<-c("id", "low", "age", "lwt", "race", "smoke", "ptl", "ht", "ui", 
"ftv", "bwt")
y<-c("id")
x
##  [1] "id"    "low"   "age"   "lwt"   "race"  "smoke" "ptl"   "ht"    "ui"   
## [10] "ftv"   "bwt"
y
## [1] "id"

假设我们想从x字符串中删掉id这个变量

setdiff(x, y)
##  [1] "low"   "age"   "lwt"   "race"  "smoke" "ptl"   "ht"    "ui"    "ftv"  
## [10] "bwt"

这样就轻易把id这个变量删除了,可有人会问,这个有什么用。在我们进行R语言编程中,可以使用它来删除变量,构造数据。假设我想写一个R的程序,能通过删减变量名改变数据结构

datchi<-function(data,dropvar) {
    
    
  name<-dput(names(data))
  dropvar<-dropvar
  cname<-setdiff(name, dropvar)
  data<-data[,cname]
  data
}

程序很简单,dropvar就是我们想删掉的变量名,假设数据中我们不想要id这个数据

dat<-datchi(bc,"id")
## c("id", "low", "age", "lwt", "race", "smoke", "ptl", "ht", "ui", 
## "ftv", "bwt")
head(dat,6)
##   low age lwt  race     smoke ptl ht ui ftv  bwt
## 1   0  19 182 black nonsmoker   0  0  1   0 2523
## 2   0  33 155 other nonsmoker   0  0  0   3 2551
## 3   0  20 105 white    smoker   0  0  0   1 2557
## 4   0  21 108 white    smoker   0  0  1   2 2594
## 5   0  18 107 white    smoker   0  0  1   0 2600
## 6   0  21 124 other nonsmoker   0  0  0   0 2622

多删几个也是可以的

dat<-datchi(bc,c("id", "low", "age"))
## c("id", "low", "age", "lwt", "race", "smoke", "ptl", "ht", "ui", 
## "ftv", "bwt")
head(dat,6)
##   lwt  race     smoke ptl ht ui ftv  bwt
## 1 182 black nonsmoker   0  0  1   0 2523
## 2 155 other nonsmoker   0  0  0   3 2551
## 3 105 white    smoker   0  0  0   1 2557
## 4 108 white    smoker   0  0  1   2 2594
## 5 107 white    smoker   0  0  1   0 2600
## 6 124 other nonsmoker   0  0  0   0 2622

这个只是一个粗浅的应用,在设计R包程序中,我们可以使用分组别变量进行加和,然后再与数据的全部变量进行比较,这样可以得出全部变量中是否有异常数据,还有一些其他的用法,有空再聊聊。

猜你喜欢

转载自blog.csdn.net/dege857/article/details/130511467
今日推荐