當前位置:首頁 » 網路資訊 » 怎樣修改r語言里數據集的變數
擴展閱讀
南充迅達可以做網站嗎 2025-07-05 15:46:27

怎樣修改r語言里數據集的變數

發布時間: 2022-11-27 01:54:32

⑴ R語言一鍵製作Table 1,就是這么簡單!

轉自醫學方

2019-07-4 Alexander

流行病學或者醫學論文中,對研究對象基本情況的描述通常以表格的形式進行,並且放在結果部分的開頭,即Table 1,主要內容是研究對象一般情況和研究變數或協變數的分組展示。

前幾天文章修回過程中,花了兩天時間分析數據,修改文章,其中有近1天的時間都在手動錄入數據(從R studio里把分析結果整理到Excel或者word),這樣除了花費時間外,還非常容易出錯。之前一直想找時間通過R markdown把製作表格的過程程序化,可是效果並不理想。

這次痛定思痛,先從table 1開始,發現了幾個不錯的方法。其中一種個人覺得可讀性和可編輯性都比較強,於是學習了一下,作為一個非常實用的工具分享給大家。

這里主要參考一篇博客Fast-track publishing using knitr: table mania,對細節進行了加工和注釋。

1 數據的准備

數據主要來自於boot包的melanoma。載入後,看下數據的基本結構。

接下來對數據進行簡單的整理,為後續分析做准備;

將分類變數定義為因子型並設置標簽(這里建議設置一個新的變數,僅用於table 1的製作,不影響後續的分析);

2 安裝和載入R包 Gmisc

後面兩個包是載入「Gmisc」時要求載入的。

3 自定義函數、製作表格

根據已有函數自定義函數,並製作表格。定義一個函數,輸入數據集的變數並得到該變數的統計結果:

函數定義完成後,建立一個空的列表,以儲存每個變數的分析結果,並進行分析,將結果儲存在列表中:

將所有結果merge到一個矩陣中,並建立rgroup(table1第一列的變數名) 和 n.rgroup(table 1第一列每個變數的行數):

結果如下:

當然,有些情況下,需要多加一個分組標題欄(column spanner),該怎麼加呢?

如下:

結果如下:

4 導出結果

在R studio viewer窗口點擊白色按鈕,即可在瀏覽器中打開,然後復制粘貼到word可以進一步加工修飾。

是不是很刺激呢。
應該還有其他的導出方法,不過這個已經很方便了。

拓展功能選

⒈ 二分類變數只顯示一個(比如男性和女性)。只要在getDescriptionStatsBy的"show_all_values"參數設置為FALSE即可;

⒉ 顯示缺失值。getDescriptionStatsBy的"useNA"參數設置為"ifany",表示如果有缺失值就顯示缺失值情況;如設置為「no」,表示始終不顯示缺失值情況;「always」則表示無論是否有缺失值都顯示缺失值情況;

⒊ Total一列是可以去掉的,getDescriptionStatsBy的"add_total_col"參數設置為FALSE即可。

不足之處

⒈ 差異性檢驗是採用非參的方法,雖然沒有錯,但是一般符合參數檢驗條件的數據還是要使用參數檢驗的方法,這里可以自行檢驗後再修改P-value;

⒉ Mean (SD)的展示形式有個括弧感覺有點別扭,還不知道怎麼去掉,有方法的小夥伴歡迎分享交流。

另外有一些其他的製作table 1的R包,比如table 1(R包的名字)包,tableone包,還有其他生成表格的R包(plyr等),個人瀏覽下來感覺這個最容易理解和掌握,其他包的功能有興趣的可以再自行挖掘對比。

原文鏈接: https://mp.weixin.qq.com/s?src=11&timestamp=1562230826&ver=1707&signature=SxdO6A1qxNy-4k8AyE9wUMYKSarBLDydWO-vazmCNPJIAa5GfaBiFIghaO&new=1

⑵ r語言如何不改變excel中的格式

導入R語言後數據格式可能會變,不過不用擔心,只需要輸入代碼,轉換數據格式即可。例如,將數據集a的字元型變數x轉化為數值型變數x,其代碼如下:
a$x=as.numeric(a$x)

⑶ R語言數據集行列互換技巧

R語言數據集行列互換技巧
現在給大家介紹的數據處理技巧是長轉寬,也就相當於Excel中的轉置,不過用R語言實現的長轉寬還有數據合並的功能,自然比Excel強大多了。
這里給大家介紹4個函數,其中melt()、dcast()來自reshape2包,gather()、spread()來自tidyr包
一、寬轉長——melt()、gather()
[python] view plain

mydata<-data.frame(
name=c("store1","store2","store3","store4"),
address=c("普陀區","黃浦區","徐匯區","浦東新區"),
sale2014=c(3000,2500,2100,1000),
sale2015=c(3020,2800,3900,2000),
sale2016=c(5150,3600,2700,2500),
sale2017=c(4450,4100,4000,3200)
)
#寬轉長——melt
mydata1<-melt(
mydata,
id.vars=c("address","name"),#要保留的主欄位
variable.name = "Year",#轉換後的分類欄位名稱(維度)
value.name = "Sale" #轉換後的度量值名稱
)

輸出結果
[python] view plain

> mydata1<-melt(
+ mydata,
+ id.vars=c("address","name"),#要保留的主欄位
+ variable.name = "Year",#轉換後的分類欄位名稱(維度)
+ value.name = "Sale" #轉換後的度量值名稱
+ )
> mydata1
address name Year Sale
1 普陀區 store1 sale2014 3000
2 黃浦區 store2 sale2014 2500
3 徐匯區 store3 sale2014 2100
4 浦東新區 store4 sale2014 1000
5 普陀區 store1 sale2015 3020
6 黃浦區 store2 sale2015 2800
7 徐匯區 store3 sale2015 3900
8 浦東新區 store4 sale2015 2000
9 普陀區 store1 sale2016 5150
10 黃浦區 store2 sale2016 3600
11 徐匯區 store3 sale2016 2700
12 浦東新區 store4 sale2016 2500
13 普陀區 store1 sale2017 4450
14 黃浦區 store2 sale2017 4100
15 徐匯區 store3 sale2017 4000
16 浦東新區 store4 sale2017 3200
再來看看gather()函數怎麼用
[python] view plain

> #寬轉長——gather
> mydata1<-tidyr::gather(
+ data=mydata,
+ key="Year",
+ value="sale",
+ sale2014:sale2017
+ )
> mydata1
name address Year sale
1 store1 普陀區 sale2014 3000
2 store2 黃浦區 sale2014 2500
3 store3 徐匯區 sale2014 2100
4 store4 浦東新區 sale2014 1000
5 store1 普陀區 sale2015 3020
6 store2 黃浦區 sale2015 2800
7 store3 徐匯區 sale2015 3900
8 store4 浦東新區 sale2015 2000
9 store1 普陀區 sale2016 5150
10 store2 黃浦區 sale2016 3600
11 store3 徐匯區 sale2016 2700
12 store4 浦東新區 sale2016 2500
13 store1 普陀區 sale2017 4450
14 store2 黃浦區 sale2017 4100
15 store3 徐匯區 sale2017 4000
16 store4 浦東新區 sale2017 3200
和melt()函數不同,gather()函數需要指定關鍵欄位key,以及關鍵欄位對應的值value,但是gather()函數更加好理解。
二、長轉寬——dcast()和spread()
還是用上面的data1數據集,先來看看dcast()函數
[python] view plain

#長轉寬——dcast
dcast(
data=mydata1,
name+address~Year
#左側是要保留的欄位,右側是要分割的分類變數,列數等於表達式
#右側分類變數的類別個數
)

[python] view plain

> #長轉寬——dcast
> dcast(
+ data=mydata1,
+ name+address~Year
+ #左側是要保留的欄位,右側是要分割的分類變數,列數等於表達式
+ #右側分類變數的類別個數
+ )
Using sale as value column: use value.var to override.
name address sale2014 sale2015 sale2016 sale2017
1 store1 普陀區 3000 3020 5150 4450
2 store2 黃浦區 2500 2800 3600 4100
3 store3 徐匯區 2100 3900 2700 4000
4 store4 浦東新區 1000 2000 2500 3200
dcast()函數的使用規則需要琢磨下才能理解,大家好好看看注釋部分,再來看看spread()
[python] view plain

#長轉寬——spread
tidyr::spread(
data=mydata1,
key=Year,
value=sale
)

[python] view plain

> #長轉寬——spread
> tidyr::spread(
+ data=mydata1,
+ key=Year,
+ value=sale
+ )
name address sale2014 sale2015 sale2016 sale2017
1 store1 普陀區 3000 3020 5150 4450
2 store2 黃浦區 2500 2800 3600 4100
3 store3 徐匯區 2100 3900 2700 4000
4 store4 浦東新區 1000 2000 2500 3200
直接調用tidyr::spread,需要指定關鍵欄位key和對應的值value。
但是從理解上來看,我個人更喜歡tidyr包的函數,使用很清晰,大家可以根據實際情況自行選擇,好啦,今天的分享結束,下次再見!

⑷ r語言中怎麼給數據集中變數重命名

您好,這個語句就可以: scale(data, center=T,scale=T),由於默認值均為T,簡寫成scale(data)即可標准化,data就是你導入的數據集的名稱

⑸ R語言怎麼修改其中某一個變數的顯示方式

你建立一個映射,把代號映射成你想要的時間格式。

⑹ 剛學習R語言,問一下怎麼編呢

安裝完畢R語言,新建屬於自己的R變成文件夾,然後 File ->Change Dir..,設置成自己的工作文件,自己工作空間將都會產生在這個文件夾下。2 /5 然後Files - > New Script,打開新的腳本編輯,在這里鍵入自己代碼,編輯。在...

⑺ R語言系列8 | 變數類型7-矩陣的創建修改和索引

矩陣是可以看作一種特殊的向量的,它比向量多了兩個附加屬性,行數和列數,因此讓它的復雜程度獲得了提高。

向量作為R中的一種非常基礎的數據類型,大家通過過去的學習一定已經徹底的掌握了。但是,這個世界上的數據是復雜多變的,我們只使用向量是無法表示更加復雜的數據情況。

我們在線性代數課上學過一種數學概念,矩陣。這個概念在為了統計學家開發的R語言中同樣適用,並且只需要在基礎環境中,我們可以具有很多對矩陣的操作方法。

( 由於R其實處理數據框較多,矩陣並不會講很多的東西,如果非要使用矩陣,我其實還是更推薦去隔壁Python學習np和scipy )

任何數據類型學習的開始都是如何得到它,也就是如何創建它。矩陣也不例外,我們首要的 創建方式就是直接使用matrix函數進行創建 。而且其實說是創建矩陣,我們其實是在把一個向量轉化為矩陣,

上面就是最基本的創建矩陣的方法了。我們 需要給matrix一個向量 (其實矩陣也可以,不過就會讓你產生一些奇奇怪怪的誤導,後面講解了矩陣轉向量的時候你就明白了),這個向量的內容就會成為創建的矩陣的內容。

然後跟著需要 指定你想創建的行數或者列數 ,這兩個只需要指定其一即可,R會給我們計算另一個數字是幾的,這樣,我們就創建好了一個矩陣。

但是我們可以發現一個問題,我們創 建的矩陣是豎著一排排放的,這個叫做,****列優先原則 ,我們也可以通過指定參數 byrow,來讓矩陣變成行優先

這就是行優先矩陣了,存儲的內容都是一樣的,就是行列優先順序不同。

到這里你可能就會問了,R是不是只能創建方陣呢,普通的矩陣能不能創建呢?那當然可以了

我本人是習慣列優先進行存儲的,所以我一般不指定byrow參數。

任何一種數據類型,我們對它最優先的操作學習,都是索引操作。任何一種結構的數據,我們存儲它的目的都是為了使用,所以學習如果取到它的值,是非常重要的事情。

對矩陣的基本索引方式和向量非常相似,如果不了解向量的直接索引,布爾索引和連續索引,請看

由於有了上面的基礎,所以我們先索引點簡單的,然後做兩個不一樣的案例。矩陣和向量最大的區別再與矩陣具有兩個維度,索引的時候需要兩個位置

這里停一下,我們取第一行的所有列就已經是不同了,要注意, 當我們想取某一行的所有列,或者某列的所有行,或者當你想取所有的時候,把位置空出來 ,R就會自動給你取到所有。

說完了上面的,下面就都非常簡單了

大家尤其要注意最後一種,取前兩行和後兩列的操作,很多時候這是非常有用的步驟,會減少你使用循環,提高程序的運行速度。

講解完了索引,我們來講一下如何矩陣的內容以及刪除矩陣的行列。

其實修改特定位置的值非常簡單,我們都已經找到了,修改就是一瞬間的事情,

除了單個值的修改,我們 還可以對索引到的行和列進行修改 ,一般來說,我們會直接把要修改的結果放進向量中,然後進行修改,但是如果修改的值不夠長,也是可以操作的,如下

如果你對上面的內容表示有些困惑,那麼你應該回憶一下,

這里有著你需要了解的一切。

最後講解如何刪除矩陣的行列,這里的操作也和向量是一樣的,具體請回顧

本文的全部內容就到此結束了,這篇文章講解了 最最基本的矩陣創建方法,以及對矩陣進行索引的操作,加上修改矩陣元素和刪除矩陣的列等等 ,這些都是使用矩陣的基礎知識,需要徹底掌握,才能在矩陣的使用中得心應手。

下一篇文章將會介紹矩陣維度,矩陣轉化為向量以及矩陣的各種運算,矩陣的轉置等內容。

⑻ R語言數據結構-向量

R語言數據結構主要有以下四種:

向量:一串相同類型的數據,不限於數字,字元,邏輯都可以,單獨拿出來的一列。什麼是看做一個整體,一個向量里有若干個數據,它們組成一個整體之後,可以擁有一個共同的名字。

以下主要講向量:

向量就是一串數據,串聯在一起,組成一個整體,向量由元素組成。

很長的向量要麼從數據框提取一列,或是有規律地生成,如連續的數據:

paste0函數連接兩個向量,逗號 , 前後各有一個向量,如字元型和數值型向量。

paste0和paste的區別是:

paste0函數 把兩個向量的元素一一對應進行 無縫 連接,而 paste函數 把兩個向量的元素一一對應進行 空格 連接。paste函數有默認值為空格,在空格處把空格去掉sep=""引號里把默認的空格去掉,即什麼沒有,就變成無縫連接,也可以用其它的符號連接sep="/",sep="_"等。

數值型、字元型、邏輯型:只要有字元型在,用c()生成向量為字元型。只有邏輯型和數值型,用c()生成向量為數值型。

c()函數生成向量時,要求為生成同一種數據類型

注意的地方:

變數名 :c()為生成向量函數,一般除字母c外,取單個字母或是單詞及縮寫,組成變數名的字母之間不要有空格,不能以數字為變數名或是以數字開頭,變數名不能是中文名,特殊符號等。

<- 與c()函數之間沒有空格。

<- 的快捷鍵輸入:

mac電腦: option 和 - ;

windows電腦: Alt 和 -

= 在任何情況下可替代 <- ,但是 = 除了賦值,還有其它用法,比如函數里參數用法。 <- 不能在任意情況下代替 = 。

強大的計算是體現在批量計算上,先把一些數據組成一個整體,

還是以向量x為單位進行

其中五個重要函數,一定要掌握。

能用函數代替的東西,堅決不用手和眼睛去數,比如length()統計向量元素個數。

結論:unique(x)與x[!plicated(x)]函數相同

用identical()可以判斷兩個函數是否相同(數據結構與數據類型是否完全相同)

重點和難點:

x==y :x和對應位置的y相等嗎?(x和y里的元素,按順序一一對應比較,講究位置對應,兩者里第一個元素相同就返TRUE,比較完兩個向量的第一位置上的元素,接著比較兩個向量第二個位置元素...到兩個向量最後)。

x和y不一樣長:理解「循環補齊」

結論: 如果x與y的向量元素長度不相等,以長度向量說了算,不是由在==前的向量決定。

x%in%y :x的每個元素在y中存在嗎?(x的元素挨個到y里和所有元素比較,在y里有的相同的返回TRUE,不講究位置,有就是TRUE,沒有為FALSE)。比如y向量加了一個元素2,返回還是9個邏輯值,返回的邏輯值是與x一一對應,和y沒有關系。

加減乘除,兩個向量直接可以進行,等位運算。前提是兩個向量必須等長,即元素個數一樣。

用paste0或是paste連接兩個向量,兩個向量的長度(元素個數)不一致,循環補齊。

intersect(x,y),union(x,y),setdiff(x,y),setdiff(y,x),x與y順序顛倒(setdiff()與%in%有點兒相似)。

[] :取子集符號,將TRUE對應的值挑選出來,FALSE丟棄.

例:在13個數中,取出大於7的數,首先把13個數值組成一個向量x,x>7返回是邏輯值。

取值子集的對象放在中括弧的外面,取子集的邏輯值向量放在中括弧裡面。

單獨運行中括弧里的向量,中括弧里各種條件的返回結果有共同的規律,是一個與x等長的邏輯值向量。

下標:代表在哪個位置上。

符號 : []

按照邏輯值: 中括弧里是與x等長的邏輯值向量

按照位置: 中括弧里是由x的下標組成的向量(支持反選)

思考:從13個彩色(綠,藍,黃)球中,選出屬於藍色和綠色的:

使用x %in% y還是x ==y,用x %in% y,不是等位循環補齊運算,%in%比較靈活,可以在很多場景中使用,如3選2,50選2,50選20等。

13個球的顏色賦值給向量x,藍色和綠色賦值給y。

x %in% y

x[x %in% y]

修改向量的元素,修改x里的第四個元素

注意:R於語言里所有的修改,都要賦值,沒有賦值就是沒有發生過

把隨機函數生成的數永遠為一組數據:用隨機函數生成向量,後運行set.seed(10086)

x[match(y,x)] 和 x[order(x)]

排序,如何調整元素順序

結論:sort(x)等於x[order(x)],背誦下來

兩個向量沒有做關聯的操作,可以用order函數排序對應信息

向量匹配排序-match,match函數是連線用的

x[match(y,x)] 的以後用法:以y作為模版,給x調順序。

match:誰在中括弧外面,誰就在後面, x[match(y,x)] ,以y作為模板,用x作為原料去取子集,按照一個順序取子集,取出來的子集和y一樣。

需要背誦的兩個用法: x[match(y,x)] 和 x[order(x)]

練習題:在以下x和y表格里如何將y的列名一對一替換為ID

切換Rproj的時候出現彈窗:是否將工作空間保存到 .Rdata ?

答案是:不保存,之前單獨保存好腳本和圖片,這里出現的提示是否臨時保存,不需要保存。

.Rdata ?是什麼:

以 . 開頭的文件,通常用作配置,系統默認隱藏這類文件

.Rdata 是保存工作空間的默認文件

.History 是保存歷史命令的默認文件

如果打開Rstudio特別慢,可能是因為 .Rdata 保存了很大的變數,可以找到 .Rdata 文件將其刪除。

在Rproj右下角打開腳本時,編輯器腳本的中文注釋出現亂碼,解決如下:

以上內容是聽 生信技能樹 小潔老師的 R語言線上課 ,根據自己的理解記錄下來,小潔老師授課非常細心,對不同水平的同學都照顧到,並且補充很多技巧以及注意事項。

之前學習過R語言,那時對向量認識不夠深,也沒有重視,數據框的列單獨拿出來就是一個向量。認真聽小潔老師的講解以及最近跑幾個GEO數據集發現學會對向量的熟練操作以及熟練一些重要的函數,在實戰過程中會順利些。

⑼ r語言如何把數據框內的數值型數據轉變成日期型數據

有數據集a,變數x,將變數x從數值型變為日期型,其代碼如下:

a$x=as.Date(a$x)

⑽ r語言中的data.entry中的數據怎麼修改

可以控制數字的小數位數,最多22位。

要控制某個變數的位數,可以format(round(1.20, 2), nsmall = 2),nsmall是顯示的小數位數。
數字換做變數應該沒有問題。