日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《R语言实战》第4章

發(fā)布時(shí)間:2025/3/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《R语言实战》第4章 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
# 第四章 基本數(shù)據(jù)管理 # 4.1 一個(gè)例子 manager <- c(1, 2, 3, 4, 5) date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08", "5/1/09") country <- c("US", "US", "UK", "UK", "UK") gender <- c("M", "F", "F", "M", "F") age <- c(32, 45, 25, 39, 99) q1 <- c(5, 3, 3, 3, 2) q2 <- c(4, 5, 5, 3, 2) q3 <- c(5, 2, 5, 4, 1) q4 <- c(5, 3, 3, 3, 2) q5 <- c(5, 3, 3, 3, 2) leadership <- data.frame(manager, date, country, gender, age,q1, q2, q3, q4, q5, stringsAsFactors = FALSE)# 4.2 創(chuàng)建新變量 # 定義數(shù)據(jù)框 mydata <- data.frame(x1 = c(2, 2, 6, 4),x2 = c(3, 4, 2, 8)) # 第一種方式 mydata$sumx <- mydata$x1 + mydata$x2 mydata$meanx <- (mydata$x1 + mydata$x2)/2 # 第二種方式 attach(mydata) mydata$sumx <- x1 + x2 mydata$meanx <- (x1 + x2)/2 detach(mydata) # 第三種方式 mydata <- transform(mydata,sumx = x1 + x2,meanx = (x1 + x2)/2)# 4.3 變量的重編碼 # 重編碼涉及根據(jù)同一個(gè)變量和/或其他變量的現(xiàn)有值創(chuàng)建新值的過(guò)程 # 語(yǔ)句variable[condition] <- expression將僅在condition的值為TRUE時(shí)執(zhí)行賦值。 # 必須將99歲的年齡值重編碼為缺失值 leadership$age[leadership$age == 99] <- NA leadership$agecat[leadership$age > 75] <- "Elder" leadership$agecat[leadership$age >= 55 &leadership$age <= 75] <- "Middle Aged" leadership$agecat[leadership$age < 75] <- "Yong" # 可以將上面的代碼寫成更緊湊的 leadership <- within(leadership, {agecat <- NAagecat[age > 75] <- "Elder"agecat[age >= 55 & age <= 75] <- "Middle Age"agecat[age < 55] <- "Yong"})# 4.4 變量的重命名 # 如果對(duì)現(xiàn)有的變量名稱不滿意,你可以交互地或者以編程的方式修改它們 install.packages("reshape") library(reshape) # 格式:rename(dataframe, c(oldname = "newname”, oldname = "newname"),...) # 例子: leadership <- rename(leadership,c(manager = "managerID", date = "testDate")) # 可以通過(guò)names()函數(shù)來(lái)重命名變量 names(leadership)[2] <- "testDate" # 類似的方式: names(leadership)[6:10] <- c("item1", "item2", "item3", "item4", "item5") # 還原 names(leadership)[6:10] <- c("q1", "q2", "q3", "q4", "q5")# 4.5 缺失值 # 缺失值以符號(hào)NA(Not Available,不可用)表示 # 不可能出現(xiàn)的值(例如,被0除的結(jié)果) 通過(guò)符號(hào)NaN(Not a Number,非數(shù)值)來(lái)表示 y <- c(1, 2, 3, NA) is.na(y) # leadership is.na(leadership[, 6:10])# 4.5.2 在分析中排除缺失值 # 由于x中的第3個(gè)元素是缺失值,所以y和z也都是NA(缺失值)。 x <- c(1, 2, NA, 3) y <- x[1] + x[2] + x[3] + x[4] z <- sum[x] # 好在多數(shù)的數(shù)值函數(shù)都擁有一個(gè)na.rm=TRUE選項(xiàng),可以在計(jì)算之前移除缺失值并使用剩余值進(jìn)行計(jì)算: y <- sum(x, na.rm = TRUE) # 可以通過(guò)函數(shù)na.omit()移除所有含有缺失值的觀測(cè)。na.omit()可以刪除所有含有缺 失數(shù)據(jù)的行。 newdata <- na.omit(leadership)# 4.6 日期值 # 日期值通常以字符串的形式輸入到R中,然后轉(zhuǎn)化為以數(shù)值形式存儲(chǔ)的日期變量。函數(shù)as.Date()用于執(zhí)行這種轉(zhuǎn)化。其語(yǔ)法為as.Date(x, "input_format"),其中x是字符型數(shù) 據(jù),input_format則給出了用于讀入日期的適當(dāng)格式 # 日期格式 # 符號(hào) 含義 示例 # %d 數(shù)字表示的日期(0~31) 01~31 # %a 縮寫的星期名 Mon # %A 非縮寫星期名 Monday # %m 月份(00~12) 00~12 # %b 縮寫的月份 Jan # %B 非縮寫的月份 January # %y 兩位數(shù)的年份 07 # $Y 四位數(shù)的年份 2007 # 日期值的默認(rèn)輸入格式為yyyy-mm-dd。以下語(yǔ)句將默認(rèn)格式的字符型數(shù)據(jù)轉(zhuǎn)換為了對(duì)應(yīng)日期 mydates <- as.Date(c("2019-03-13", "2019-01-01")) # 使用mm/dd/yyyy的格式讀取數(shù)據(jù) strDates <- c("01/05/2019", "11/22/2020") dates <- as.Date(strDates, "%m/%d/%Y") # 轉(zhuǎn)換leadership myformat <- "%m/%d/%y" leadership$testDate <- as.Date(leadership$testDate, myformat) # Sys.Date()可以返回當(dāng)天的日期,而date()則返回當(dāng)前的日期和時(shí)間。 Sys.Date() date() # 格式化日期時(shí)間 # 可以使用函數(shù)format(x, format="output_format")來(lái)輸出指定格式的日期值,并且 15 可以提取日期值中的某些部分 today <- Sys.Date() format(today, format = "%B %d %Y") # 查看當(dāng)前的星期名 format(today, format="%A") # R的內(nèi)部在存儲(chǔ)日期時(shí),是使用自1970年1月1日以來(lái)的天數(shù)表示的,更早的日期則表示為負(fù) 數(shù)。這意味著可以在日期值上執(zhí)行算術(shù)運(yùn)算。例如: startdate <- as.Date("2018-03-13") enddate <- as.Date("2019-03-14") days <- enddate - startdate days # 也可以使用函數(shù)difftime()來(lái)計(jì)算時(shí)間間隔,并以星期、天、時(shí)、分、秒來(lái)表示。 today <- Sys.Date() dob <- as.Date("1994-10-02") difftime(today, dob, units = "weeks") format(dob, format = "%A")# 4.6.1 將日期轉(zhuǎn)換為字符型變量 strDates <- as.character(dates)# 4.6.2 更進(jìn)一步 help("as.Date") help("strftime")# 4.7 類型轉(zhuǎn)換 # 類型轉(zhuǎn)換函數(shù):名為is.datatype()這樣的函數(shù)返回TRUE或FALSE,而as.datatype()這樣的函數(shù)則將其參數(shù)轉(zhuǎn)換為對(duì)應(yīng)的類型。 # 判斷 轉(zhuǎn)換 # is.numeric() as.numberic() # is.character() as.character() # is.vector() as.vector() # is.matrix() as.matrix() # is.data.frame() as.data.frame() # is.factor() as.factor() # is.logical() as.logical() # 代碼清單4-5 轉(zhuǎn)換數(shù)據(jù)類型 a <- c(1, 2, 3) is.numeric(a) # 輸出:TRUE is.vector(a) # 輸出:TRUE # 轉(zhuǎn)為字符串 a <- as.character(a) a # 輸出:[1] "1" "2" "3" is.numeric(a) # 輸出:FALSE is.vector(a) # 輸出:TRUE is.character(a) # 輸出:TRUE# 4.8 數(shù)據(jù)排序 # 在R中,可以使用order()函數(shù)對(duì)一個(gè)數(shù)據(jù)框進(jìn)行排序。默認(rèn)的排序順序是升序。在排序變量的前邊加一個(gè)減號(hào)即可得到降序的排序結(jié)果。 # 以下示例使用leadership演示了數(shù)據(jù)框的排序 # 創(chuàng)建了一個(gè)新的數(shù)據(jù)集,其中各行依經(jīng)理人的年齡升序排序。語(yǔ)句: newdata <- leadership[order(leadership$age),] # 將各行依女性到男性、同樣性別中按年齡升序排序。 attach(leadership) newdata <- leadership[order(gender, age),] detach(leadership) # 將各行依經(jīng)理人的性別和年齡降序排序。 attach(leadership) newdata <- leadership[order(gender, -age),] detach(leadership)# 4.9 數(shù)據(jù)集的合并 # 4.9.1 添加列 # 要橫向合并兩個(gè)數(shù)據(jù)框(數(shù)據(jù)集),請(qǐng)使用merge()函數(shù)。在多數(shù)情況下,兩個(gè)數(shù)據(jù)框是通過(guò)一個(gè)或多個(gè)共有變量進(jìn)行聯(lián)結(jié)的(即一種內(nèi)聯(lián)結(jié),inner join)。 # 例如以下代碼將dataframeA和dataframeB按照ID進(jìn)行了合并。 # total <- merge(dataframeA, dataframeB, by = "ID") # 將兩個(gè)數(shù)據(jù)框按照ID和Country進(jìn)行了合并。類似的橫向聯(lián)結(jié)通常用于向數(shù)據(jù)框中添加變量。 # total <- merge(dataframeA, dataframeB, by = c("ID", "Country") # 注意 如果要直接橫向合并兩個(gè)矩陣或數(shù)據(jù)框,并且不需要指定一個(gè)公共索引,那么可以直接 # 使用cbind()函數(shù): # total <- cbind(A, B) # 這個(gè)函數(shù)將橫向合并對(duì)象A和對(duì)象B。為了讓它正常工作,每個(gè)對(duì)象必須擁有相同的行數(shù), 且要以相同順序排序。 # merge: total <- merge(leadership, newdata, by = "managerID") # cbind total <- cbind(leadership, newdata)# 4.9.2 添加行 # 要縱向合并兩個(gè)數(shù)據(jù)框(數(shù)據(jù)集),請(qǐng)使用rbind()函數(shù): # total <- rbind(dataframeA, dataframeB) # 兩個(gè)數(shù)據(jù)框必須擁有相同的變量,不過(guò)它們的順序不必一定相同。如果dataframeA中擁有 dataframeB中沒(méi)有的變量,請(qǐng)?jiān)诤喜⑺鼈冎白鲆韵履撤N處理: # 刪除dataframeA中的多余變量; # 在dataframeB中創(chuàng)建愛你追加的變量并將其設(shè)置為NA(缺失值) # 縱向聯(lián)結(jié)通常用于向數(shù)據(jù)框中添加觀測(cè) total <- rbind(leadership, newdata)# 4.10 數(shù)據(jù)集取子集 # 4.10.1 選入(保留)變量 # 數(shù) 據(jù)框中的元素是通過(guò)dataframe[row indices, column indices]這樣的記號(hào)來(lái)訪問(wèn)的。例如: newdata <- leadership[, c(6:10)] # 從leadership數(shù)據(jù)框中選擇了變量q1、q2、q3、q4和q5,并將它們保存到了數(shù)據(jù)框newdata 中。將行下標(biāo)留空(,)表示默認(rèn)選擇所有行。 myvars <- c("q1", "q2", "q3", "q4", "q5") newdata <- leadership[myvars] # 也可以如下的方式實(shí)現(xiàn)(實(shí)現(xiàn)不了,paste函數(shù)有問(wèn)題) # myvars <- paste("q", 1:5, seq = "") # nnewdata <- leadership[myvars]# 4.10.2 剔除(丟棄)變量 # 如果某個(gè)變量中有若干缺失值,你可能就想在進(jìn)一步分 析之前將其丟棄。 # 以下是剔除leadership數(shù)據(jù)框中的變量q3和q4 myvars <- names(leadership) %in% c("q3", "q4") newdata <- leadership[!myvars] # 以下是對(duì)上面兩句的分析: # (1) names(leadership)生成了一個(gè)包含所有變量名的字符型向量: c("managerID","testDate","country","gender","age","q1", "q2","q3","q4","q5")。 # (2) names(leadership) %in% c("q3", "q4")返回了一個(gè)邏輯型向量,names(leadership) 中每個(gè) 匹配q3或q4的元素的值為TRUE,反之為FALSE:c(FALSE, FALSE, FALSE, FALSE,FALSE, FALSE, FALSE, TRUE, TRUE, FALSE)。 # (3) 運(yùn)算符非(!)將邏輯值反轉(zhuǎn):c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE,FALSE, TRUE)。 # (4) leadership[c(TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE,TRUE)]選擇了邏輯值為TRUE的列,于是q3和q4被剔除了。# 在知道q3和q4是第8個(gè)和第9個(gè)變量的情況下,可以使用語(yǔ)句將它們剔除。這種方式的工作原理是,在某一列的下標(biāo)之前加一個(gè)減號(hào)(?)就會(huì)剔除那 一列。 newdata <- leadership[c(-8, -9)] # 相同的變量刪除工作亦可通過(guò)以下語(yǔ)句完成: newdata$q1 <- newdata$q2 <- NULL# 4.10.3 選入觀測(cè) # 選入或剔除觀測(cè)(行)通常是成功的數(shù)據(jù)準(zhǔn)備和數(shù)據(jù)分析的一個(gè)關(guān)鍵方面。 # 代碼清單4-6 選入觀測(cè) newdata <- leadership[1:3, ] newdata <- leadership[which(leadership$gender == "M" &leadership$age > 30),] # 方式二: attach(leadership) newdata <- leadership[which(gender == "M" & age > 30),] detach(leadership) # 在以上每個(gè)示例中,你只提供了行下標(biāo),并將列下標(biāo)留空(故選入了所有列)。在第一個(gè)示 例中,你選擇了第1行到第3行(前三個(gè)觀測(cè))。 # 在第二個(gè)示例中,你選擇了所有30歲以上的男性。讓我們拆解這行代碼以便理解它。 # (1) 邏輯比較leadership$gender=="M"生成了向量c(TRUE, FALSE, FALSE, TRUE, FALSE)。 # (2) 邏輯比較leadership$age > 30生成了向量c(TRUE, TRUE, FALSE, TRUE, TRUE)。 # (3) 邏輯比較c(TRUE, FALSE, FALSE, TRUE, TRUE) & c(TRUE, TRUE, FALSE, TRUE,TRUE)生成了向量c(TRUE, FALSE, FALSE, TRUE, FALSE)。 # (4) 函數(shù)which()給出了向量中值為TRUE元素的下標(biāo)。因此,which(c(TRUE, FALSE,FALSE, TRUE, FALSE))生成了向量c(1, 4)。 # (5) leadership[c(1,4),]從數(shù)據(jù)框中選擇了第一個(gè)和第四個(gè)觀測(cè)。這就滿足了我們的選取準(zhǔn)則(30歲以上的男性)。# 將研究范圍限定在2009年1月1日到2009年12月31日之間收集的觀測(cè)上。 leadership$testDate <- as.Date(leadership$testDate, "%m/%d/%y") startdate <- as.Date("2009-01-01") enddate <- as.Date("2009-12-31") newdata <- leadership[which(leadership$testDate >= startdate &leadership$testDate <= enddate),]# 4.10.4 subset()函數(shù) # 選擇了所有age值大于等于35或age值小于24的行,保留了變量q1到q4。 newdata <- subset(leadership, age >= 35 | age < 24,select = c(q1, q2, q3, q4)) # 你選擇了所有25歲以上的男性,并保留了變量gender到q4(gender、q4和其間所有列) newdata <- subset(leadership, age > 25 & gender == "M",select = gender:q4)# 4.10.5 隨機(jī)抽樣 # sample()函數(shù)能夠讓你從數(shù)據(jù)集中(有放回或無(wú)放回地)抽取大小為n的一個(gè)隨機(jī)樣本。 # 使用以下語(yǔ)句從leadership數(shù)據(jù)集中隨機(jī)抽取一個(gè)大小為3的樣本: mysample <- leadership[sample(1:nrow(leadership), 3, replace = FALSE), ] # sample()函數(shù)中的第一個(gè)參數(shù)是一個(gè)由要從中抽樣的元素組成的向量。在這里,這個(gè)向量 是1到數(shù)據(jù)框中觀測(cè)的數(shù)量,第二個(gè)參數(shù)是要抽取的元素?cái)?shù)量,第三個(gè)參數(shù)表示無(wú)放回抽樣。 sample()函數(shù)會(huì)返回隨機(jī)抽樣得到的元素,之后即可用于選擇數(shù)據(jù)框中的行。# 4.11 使用 SQL 語(yǔ)句操作數(shù)據(jù)框 install.packages("sqldf") # 代碼清單4-7 使用SQL語(yǔ)句操作數(shù)據(jù)框 library(sqldf) # 從數(shù)據(jù)框mtcars中選擇了所有的變量(列),保留了那些使用化油器 (carb)的車型(行),按照mpg對(duì)車型進(jìn)行了升序排序,并將結(jié)果保存為數(shù)據(jù)框newdf。參數(shù) row.names=TRUE將原始數(shù)據(jù)框中的行名延續(xù)到了新數(shù)據(jù)框中。 newdf <- sqldf("select * from mtcars where carb=1 order by mpg",row.names = TRUE) # 輸出了四缸和六缸車型每一gear水平的mpg和disp的平均值。 sqldf("select avg(mpg) as avg_mpg, avg(disp) as avg_disp, gearfrom mtcars where cyl in(4, 6) group by gear") 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的《R语言实战》第4章的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。