R語言學習備忘錄(三):數組、矩陣、列表和數據框、因子的應用

數組、矩陣、列表和數據框的應用

<span style="font-size:14px;">#R語言備忘錄三#
#數組array和矩陣matrix、列表list、數據框dataframe

#數組
#數組的重要屬性就是dim,維數
#得到4*5的矩陣
z <- 1:12
dim(z) <- c(3,4)
z
#構建數組
x <- array(1:20, dim = c(4,5))
#三維
y <- array(1:18, dim = c(2,3,3))
#數組下標
y[1, 2, 3]
#數組的廣義轉置,維度發生變化,把2維變成1維,把3維變成2維,把1維變成3維,即D[i,j,k] = C[j,k,i]
C <- array(1:24, dim = c(2,3,4))
D <- aperm(A, c(2,3,1))
#apply用於數組固定某一維度不變,進行計算
apply(A, 1, sum)

#矩陣
#產生矩陣
A <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE)
B <- matrix(3:17, nrow=5, ncol=3, byrow=TRUE)
#求方陣行列式的值
det(matrix(1:4, ncol = 2))
#內積
#矩陣的內積
A %*% B
#也可以使用crossprod函數
crossprod(A, B)
crossprod(A)
#向量的外積,也叫叉積
x <- 1:5
y <- 2*1:5
x %o% y
#也可以使用tcrossprod函數、outer
outer(x, y)
tcrossprod(x)
#產生對角陣
#如果變量是一個向量,則是以向量爲對角線元素的對角陣
v <- c(1, 3, 5)
diag(v)
#如果變量是一個矩陣,則是取矩陣對角線元素作爲對角陣對角線元素
diag(A)
#解線性方程Ax=b,
b <- matrix(c(1,1,1), nrow = 3, byrow = TRUE)
B <- matrix(1:9, nrow = 3, byrow = TRUE)
solve(B,b)
#求矩陣的逆
solve(B)
#ev$values是特徵根,ev$vectors是特徵向量組成的矩陣
SM <- crossprod(A, A)
ev <- eigen(SM)
#奇異解,svd$d返回的是矩陣A的奇異值,svd$u則是正交陣U,svd$v對應的是正交陣V, A = UDVT
svdA <- svd(A)
#把矩陣拉成向量
as.vector(A)
#數組或矩陣的維的名字
X <- matrix(1:6, ncol = 2,
            dimnames = list(c("one", "two", "three"), c("First", "Second")),
            byrow = T)
#亦或是
dimnames(A) <- list(c("one", "two", "three"), c("First", "Second"))
colnames(A) <- c("First", "Second")
rownames(A) <- c("one", "two", "three")

#列表
#構建列表
Lst <- list(name="Fred", wife="Mary", no.children=3, child.ages=c(4,7,9))
#列表元素,列表名[[下標]]
Lst[[2]]
Lst[[4]][2]
#也可以使用名字代替下標
Lst[["name"]]
Lst$name
#修改列表
Lst$name <- c("John", "Tom")
#刪除列表某項
Lst$name <- NULL
#連接幾個列表
list.ABC <- c(list.A, list.B, list.C)

#數據框
#data.frame,用法和list相同,如果list裏的成分滿足數據框,也可以使用as.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
#矩陣可以通過data.frame(X)轉換
#取數據框的一部分
df[1:2, 3:5]
df[["Height"]]
df$Weight
#命名
names(df)
rownames(df)
#attch()函數將數據框中的變量調入內存中,方便調用當中的數據
attach(df)
#取消連接
detach(df)
#調用edit進行編輯數據
edit(df)

#因子factor
sex <- c("M","M", "F","F")
sexf <- factor(sex)
#因子水平
sex_level <- levels(sexf)
#用table統計各類數據的頻數
sex_tab <- table(sexf)
#用gl()產生因子
#gl(n, k, length = n * k, labels = 1:n, ordered = FALSE)
</span>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章