[英]R column dataframe names number
我有一個這樣的數據框
geo 2001 2002
Spain 21 23
Germany 34 50
Italy 57 89
France 19 13
由於第二和第三列的名稱被視為數字,因此我無法獲得帶有ggplot2的條形圖。 有什么解決方案可以將列名設置為文本?
數據
pivot_dat <- read.table(text="geo 2001 2002
Spain 21 23
Germany 34 50
Italy 57 89
France 19 13",strin=F,h=T)
pivot_dat <- setNames(pivot_dat,c("geo","2001","2002"))
這樣做的方法如下:
library(ggplot2)
ggplot(pivot_dat, aes(x = geo, y = `2002`)) + geom_col()+ coord_flip()
通過使用刻度而不是雙引號/雙引號,可以確保將名稱傳遞給函數而不是字符串。
如果使用引號,則ggplot
會將此字符值轉換為因子並回收它,因此所有條形的長度均將為1
,並且標簽值為"2002"
。
注1 :
您可能想了解geom_col
和geom_bar
之間的區別:
?ggplot2::geom_bar
簡而言之, geom_col
是帶有stat = "identity"
geom_bar
,這是您想要的,因為您希望在繪圖上顯示表中的原始值。
注2 :
aes_string
可用於提供字符串而不是名稱,但此處不起作用,因為"2002"
被評估為數字:
ggplot(pivot_dat, aes_string(x = "geo", y = "2002")) +
geom_col()+ coord_flip() # incorrect output
ggplot(pivot_dat, aes_string(x = "geo", y = "`2002`")) +
geom_col()+ coord_flip() # correct output
如果沒有一個例子來確切地了解您的問題是什么,以及您想要什么,很難給您一個完美的答案。 但是,這就是事情。
您可以使用數字數據執行geom_bar。 我認為您可能會遇到3種可能的問題(但我可能無法一概而論。
首先,讓我們設置r進行繪圖。
library(readr)
library(ggplot2)
test <- read_csv("geo,2001,2002
Spain,21,23
Germany,34,50
Italy,57,89
France,19,13")
接下來,讓我們犯第一個錯誤...錯誤地調用列名。 在下一個示例中,我將告訴ggplot將數字的條形標記為2001。不是列2001
! r必須猜測我們是指2001還是對象2001
。 默認情況下,它總是選擇數字而不是列。
ggplot(test) +
geom_bar(aes(x=2001))
好的,這只是給您2001年的水平線...因為您給了它一個數字輸入而不是一個列。 讓我們修復它。 使用右引號``標識列名2001
而不是數字2001。
ggplot(test) +
geom_bar(aes(x=`2001`))
這將創建一個完美可行的條形圖。 但是也許您不想要空格? 這是您使用文本而不是數字的唯一可能原因。 但是您需要文本,因此我將向您展示如何使用as.factor
進行類似的操作(功能更強大)。
ggplot(test) +
geom_bar(aes(x=as.factor(`2001`)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.