簡體   English   中英

R列數據框名稱編號

[英]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_colgeom_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM