R语言中的列表和数据框

一、列表

# --列表

#列表是一种特殊的对象集合,跟数组一样,他的元素也有序号确定,但是不同点在于可以存在不同类型的元素。
Lst<-list(name="Fred",no.children=3,wife="Lucy",children.ages=c(4,7,9))
# $name
# [1] "Fred"
# 
# $no.children
# [1] 3
# 
# $wife
# [1] "Lucy"
# 
# $children.ages
# [1] 4 7 9

#列表元素可以Lst[[下标]]
Lst[[2]];Lst[[1]]
# [1] 3

Lst[[4]][2]
# [1] 7

#列表不同于向量,下标不能用向量的方式引用
Lst[[1:2]]
# Error in Lst[[1:2]] : 下标出界

#需要注意的是list[下标]的方式也是合法的,但是返回的是资料表类型,最为标准的引用类型是list[[下标]],
#这样返回的是原数据类型

#列表的修改
#增加元素
Lst$income<-10000
Lst$name<-"Gavin"
Lst$wife<-NULL
Lst
# $name
# [1] "Gavin"
# 
# $no.children
# [1] 3
# 
# $children.ages
# [1] 4 7 9
# 
# $income
# [1] 10000

二、数据框

数据框是R种的一个数据结构,他通常是矩阵形式的数据,但矩阵各列可以是不同类型的,数据框每列是一个变量,没行是一个观测值。

但是,数据框又是一种特殊的列表对象,其class属性为“data.frame”,各列表成员必须是向量(数值型、字符型、逻辑型)、因子、数值型矩阵、列表或者其它数据框。向量、因子成员为数据框提供一个变量,如果向量非数值型会被强型转换为因子。而矩阵、列表、数据框等必须和数据框具有相同的行数。

#----数据框
df<-data.frame(
  Name=c("Alice", "Becka", "James", "Jeffrey", "John"),
  Sex=c("F", "F", "M", "M", "M"),
  Age=c(13, 13, 12, 13, 12),
  Height=c(56.5, 65.3, 57.3, 62.5, 59.0),
  Weight=c(84.0, 98.0, 83.0, 84.0, 99.5)
)
df
#     Name  Sex  Age Height Weight
# 1   Alice   F  13   56.5   84.0
# 2   Becka   F  13   65.3   98.0
# 3   James   M  12   57.3   83.0
# 4 Jeffrey   M  13   62.5   84.0
# 5    John   M  12   59.0   99.5
class(df)
# [1] "data.frame"

Lst<-list(
  Name=c("Alice", "Becka", "James", "Jeffrey", "John"),
  Sex=c("F", "F", "M", "M", "M"),
  Age=c(13, 13, 12, 13, 12),
  Height=c(56.5, 65.3, 57.3, 62.5, 59.0),
  Weight=c(84.0, 98.0, 83.0, 84.0, 99.5)
)
Lst
# $Name
# [1] "Alice"   "Becka"   "James"   "Jeffrey" "John"   
# $Sex
# [1] "F" "F" "M" "M" "M"
# $Age
# [1] 13 13 12 13 12
# $Height
# [1] 56.5 65.3 57.3 62.5 59.0
# $Weight
# [1] 84.0 98.0 83.0 84.0 99.5

class(Lst)
# [1] "list"

as.data.frame(Lst)
#     Name Sex Age Height Weight
# 1   Alice   F  13   56.5   84.0
# 2   Becka   F  13   65.3   98.0
# 3   James   M  12   57.3   83.0
# 4 Jeffrey   M  13   62.5   84.0
# 5    John   M  12   59.0   99.5

#矩阵也可以转换为数据框,如果之前有列名就用之前的列名,没有的话系统会自动起一个
a<-array(1:6,dim=c(2,3))
a
#       [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
as.data.frame(a)
#   V1 V2 V3
# 1  1  3  5
# 2  2  4  6

#--数据框的引用,直接用下标、列名来引用数据框
df[1:3,3:4]
#   Age Height
# 1  13   56.5
# 2  13   65.3
# 3  12   57.3

df[["Name"]]
# [1] Alice   Becka   James   Jeffrey John   
# Levels: Alice Becka James Jeffrey John   #很明显转化为了factor类型

df$Name
# [1] Alice   Becka   James   Jeffrey John   
# Levels: Alice Becka James Jeffrey John

names(df)

rownames(df)<-c("one","two","three","four","five")
df
#           Name Sex Age Height Weight
# one     Alice   F  13   56.5   84.0
# two     Becka   F  13   65.3   98.0
# three   James   M  12   57.3   83.0
# four  Jeffrey   M  13   62.5   84.0
# five     John   M  12   59.0   99.5


#在每次引用df中的属性时,我们都要加上$,为了避免这种麻烦,我们采用attch函数
attach(df)
Name  #这样就能直接引用df中的变量了
# [1] Alice   Becka   James   Jeffrey John   
# Levels: Alice Becka James Jeffrey John
detach(df)
Name
# 错误: 找不到对象'Name'

猜你喜欢

转载自blog.csdn.net/glodon_mr_chen/article/details/79889500