vlambda博客
学习文章列表

R语言笔记——数据框的删除/保留二




      上个专题已经详细介绍了两个R包。dplyr和data.table,这两个R包可以广泛应用于数据分析中,下个专题将介绍R语言的一些基本技能和实用技巧。

  本文将介绍如何保留或删除数据框中的变量(列)。在R中,有多种选择或删除列的方法。






按名称模式保留/删除列

      下面的代码为以下四个变量创建数据:

INC_A SAC_AINC_B ASD_A



> mydata = read.table(text="+ INC_A SAC_A INC_B ASD_A+ 2 1 5 12+ 3 4 2 13", header=TRUE)


##   INC_A SAC_A INC_B ASD_A## 1 2 1 5 12## 2 3 4 2 13



 保留名称以“ INC”开头的列

grepl()函数用于搜索与模式的匹配项。在这种情况下,它将在数据框mydata的列名开头搜索“ INC”它返回INC_AINC_B



> mydata1 = mydata[,grepl("^INC",names(mydata))]


##   INC_A INC_B## 1 2 5## 2 3 2



删除名称以“ INC”开头的列

 ” 符号表示否定。它返回SAC_AASD_A



> mydata2 = mydata[,!grepl("^INC",names(mydata))]


##   SAC_A ASD_A## 1 1 12## 2 4 13



保留名称末尾包含“ _A”的列

      “ $”用于在字符串末尾搜索子字符串。它返回INC_ASAC_AASD_A



> mydata3 = mydata[,grepl("_A$",names(mydata))]


##  INC_A SAC_A ASD_A## 1 2 1 12## 2 3 4 13




      删除名称末尾包含“ _A”的列



> mydata4 = mydata[,!grepl("_A$",names(mydata))]




      保留名称包含字母“ S”的列



> mydata5 = mydata[,grepl("*S",names(mydata))]


##   SAC_A ASD_A## 1 1 12## 2 4 13




      如果您希望找出包含特定单词的列,则同样的逻辑也可以应用于单词。在下面的示例中,我们尝试将列包含在其中,C_A并为保留的列创建一个新的数据框。



> mydata6 = mydata[,grepl("*C_A",names(mydata))]


##   INC_A SAC_A## 1 2 1## 2 3 4




 删除名称包含字母“ S”的列



> mydata7 = mydata[,!grepl("*S",names(mydata))]


##    INC_A INC_B## 1 2 5## 2 3 2



删除列中缺失值超过50%的列

 创建一个虚拟数据框,其中包含几个缺失或空白值以供说明。



> df= data.frame(x=c(1,2,3,NA,NA), y=c(5,NA,3,NA,NA), Z=c(5,3,3,4,NA))


##    x  y  Z## 1 1 5 5## 2   2  NA   3## 3 3 3 3## 4 NA NA 4## 5 NA NA NA




 sapply功能是for loop。它在数据帧的每一列上运行内置或用户定义的函数。sapply(df, function(x)mean(is.na(x)))返回数据框中每一列中缺失值的百分比。



> df = df[,!sapply(df, function(x) mean(is.na(x)))>0.5]


##    x  Z## 1 1 5## 2 2 3## 3 3 3## 4 NA 4## 5 NA NA



R功能:保留/删除列功能

      以下程序可自动保留或删除数据帧中的列。



> KeepDrop = function(data=df,cols="var",newdata=df2,drop=1) {+ + # Double Quote Output Dataset Name+ t = deparse(substitute(newdata))+ + + # Drop Columns+ if(drop == 1){+ newdata = data [ , !(names(data) %in% scan(textConnection(cols), what="", sep=" "))]}+ + # Keep Columns+ else {+ newdata = data [ , names(data) %in% scan(textConnection(cols), what="", sep=" ")]}+ assign(t, newdata, .GlobalEnv)+ + }



如何使用上面的函数

      要保留变量'a''x',请使用下面的代码。所述drop= 0意味着保持变量被在参数“COLS”指定。参数 “数据是指输入数据帧。“ cols”是指您要保留/删除的变量。“ newdata”是指输出数据帧。



> KeepDrop(data=mydata,cols="a x", newdata=dt, drop=0)




要删除变量,请使用下面的代码。所述drop= 1意味着除去变量这是在功能的第二参数定义。



> KeepDrop(data=mydata,cols="a x", newdata=dt, drop=1)



◆R语言笔记——数据框的删除/保留一