R语言 数据框架的操作

R语言 数据框架的操作

数据框是一个由行和列组成的二维结构实体。它由等长的向量作为行。数据存储在单元格中,通过指定数据帧的相应[行,列]值集来访问。对数据框架的操作包括修改、提取和重组数据框架的内容。在这篇文章中,我们将学习有关在R中操作数据帧的各种操作。

重命名列

数据框架的列可以被重命名,以设置新的名称作为标签。然而,这些变化不会反映在原始数据框中。并非所有的列都要重新命名。列的标签可以被设置为复杂的数字、数值或字符串值。重命名所有列所需的时间复杂度是O(c),其中c是数据框架中的列数。有两种方法来重命名数据框中的列。

  • plyr包的rename()函数

    plyr包的rename()函数基于旧的名称修改列的名称。它不接受列的位置作为参数来重命名列的标签。

示例:

# R program to rename a Data Frame
  
# Adding Package
df <- library(plyr)
  
# Creating a Data Frame
df<-data.frame(row1 = 0:2, row2 = 3:5, row3 = 6:8)
print("Original Data Frame")
print(df)
print("Modified Data Frame")
  
# Renaming Data Frame
rename(df, c("row1"="one", "row2"="two", "row3"="three"))

输出:

[1] "Original Data Frame"
  row1 row2 row3
1    0    3    6
2    1    4    7
3    2    5    8
[1] "Modified Data Frame"
  one two three
1   0   3     6
2   1   4     7
3   2   5     8

列标签被改变。在这种情况下,结果必须被分配回数据框,以便保留这些变化。

  • R的内置函数:names(data frame)[col] **
    列标签可以使用列索引或列名来重新命名,以设置新的值。这些变化会反映在原始数据框中。
    names()**函数允许我们每次改变单列的标签。

示例 1:

# R program to rename 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)
print("Modified Data Frame")
  
# Renaming Data Frame
names(df)[names(df)=="row3"]<-"three"
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 row2 three
1    0    3     6
2    1    4     7
3    2    5     8

这里,第三列的标签从row3修改为3。这些变化被保留在原始数据库中。

示例 2:

# R program to rename 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)
print("Modified Data Frame")
  
# Renaming Data Frame
names(df)[2]<-"two"
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 two row3
1    0   3    6
2    1   4    7
3    2   5    8

在这里,第二列的标签从row2改为2.这些变化被保留在原始数据库中。

扩展数据框

数据框架既可以进一步扩展以聚合更多的列,也可以收缩以删除列。

  • 向数据框添加列
    列,以向量的形式,可以使用数据框架的索引模式添加。新的列被附加在数据框的末尾。新列中的值甚至可以是两个现有列的组合,例如,两个列的加减。也可以追加一个由NA值组成的列。变化会保留在原始数据框中。增加列所需的时间复杂度是O(n),其中n是数据框架的行数。有多种方法来添加新的列。

语法:

dataframe[[newcol]] <- vector 
or 
dataframe[newcol] <-vector 
or 
dataframe$newcol <-vector 

示例:

# R program to add column in a Data Frame
  
# Creating a Data Frame
df<-data.frame(col1 = 0:2, col2 = 3:5, col3 = 6:8)
print ("Original Data Frame")
print (df)
  
# Adding empty column
df[["col4"]]<-0
  
# assigns a value NA to the data frame column 5
df$"col5"<-NA
  
# Updating Values of column added
df[["col5"]] <- df[["col1"]] + df[["col2"]]
print ("Modified Data Frame")
print (df)

输出:

[1] "Original Data Frame"
  col1 col2 col3
1    0    3    6
2    1    4    7
3    2    5    8
[1] "Modified Data Frame"
  col1 col2 col3 col4 col5
1    0    3    6    0    3
2    1    4    7    0    5
3    2    5    8    0    7

首先,整个col4被赋予一个向量0的值,并添加到数据框架的最后。然后创建第五列,用df$col5访问,并赋值为NA。然后,相应的值被重新计算为第1列和第2列的元素之和。

  • 从数据框架中删除列

数据框架的列可以通过其名称或索引值从数据框架中删除。多个列可以一起从数据框中删除。所需的列名或索引可以被分配到一个NULL值,相应地,这些列会被移位。然后,这些列会根据删除的数量减少。这些变化反映在原始数据框中。

示例 1:

# R program to remove a column 
# from 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)
  
# Removing a Column
df[["row2"]]<-NULL
print(df)

输出:

[1] "Original Data Frame"
  row1 row2 row3
1    0    3    6
2    1    4    7
3    2    5    8
  row1 row3
1    0    6
2    1    7
3    2    8

row2被从数据框中删除。列的标签保持不变。**df[row2] <-NULL **也会产生一个类似的结果。

示例 2: 通过对列的整数索引来删除列

# R program to remove a column 
# from a Data Frame
  
# Creating a Data Frame
df<-data.frame(row1 = 0:2, row2 = 3:5, row3 = 6:8, row4 = rep(5))
print ("Original Data Frame")
print (df)
  
# Removing two columns
df <- df [-c(1, 3)]
print(df)

输出:

[1] "Original Data Frame"
  row1 row2 row3 row4
1    0    3    6    5
2    1    4    7    5
3    2    5    8    5
  row2 row4
1    3    5
2    4    5
3    5    5

要排除的列是用矢量-c(.列索引.)指定的。这里,第1列和第3列被从数据框中删除,而变化仍然保留在原始数据框中。

对一个数据框架进行子集

可以使用 subset() 函数,其中select参数涉及要从数据框架中删除的列名。也可以通过将多个列名转换为矢量c(col1, col2)来指定。这个操作创建了两个不相干的数据框架集合,一个是排除的列,另一个是包含的列。列的数量被删除的数量所减少。变化会反映在原始数据框中。
语法

subset(dataframe, select= - column)

例子

# R program to remove a column 
# from 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(row1, row2))
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"
  row3
1    6
2    7
3    8

这里,row1和row2都被从数据框中删除。因此,这个子集只包含原始列集的一列。

重新排序的列

数据框的列可以通过指定列名或列的索引来重新排序。原始数据框架保持不变。这些变化必须被分配回来以保留排序。在最坏的情况下,重新排序所需的时间复杂度是O(m*n),其中所有的元素都要移到一个新的位置,m是行的数量,n是列的数量。

例1 :

# R program to remove a column 
# from 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)
print("Modified Data Frame")
  
# Temporary modifying column order
# in a Data Frame
df[,c(2, 1, 3)]

输出

[1] "Original Data Frame"
  row1 row2 row3
1    0    3    6
2    1    4    7
3    2    5    8
[1] "Modified Data Frame"
  row2 row1 row3
1    3    0    6
2    4    1    7
3    5    2    8

这里,所需的顺序被指定为列索引。因此,列被重新排序为列索引[2, 1, 3]。原有的数据框架不做任何改变。

例2 :

# R program to remove a column 
# from 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)
print("Modified Data Frame")
  
# Permanently modifying column order
# in a Data Frame
df <- df[c(2, 1, 3)]
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"
  row2 row1 row3
1    3    0    6
2    4    1    7
3    5    2    8

这里,所需的顺序被指定为列名。对原始数据框进行修改。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程