下面是我想要的一個簡單的例子:參考函數參數與字符串名稱中的R
「DF1」是兩個變量「V1」和「V2」的數據幀,這樣我就可以得到簡單的ggplot功能如流:
ggplot(DF1,aes(x=V1,y=V2))+geom_line()
現在,如果我有以下兩個字符串:
name1="V1"
name2="V2"
有沒有辦法在上面ggplot代碼NAME 1和NAME更換V1和V2?我試圖使用do.call,但沒有解決。我覺得我需要公式般的目標來做到這一點。
下面是我想要的一個簡單的例子:參考函數參數與字符串名稱中的R
「DF1」是兩個變量「V1」和「V2」的數據幀,這樣我就可以得到簡單的ggplot功能如流:
ggplot(DF1,aes(x=V1,y=V2))+geom_line()
現在,如果我有以下兩個字符串:
name1="V1"
name2="V2"
有沒有辦法在上面ggplot代碼NAME 1和NAME更換V1和V2?我試圖使用do.call,但沒有解決。我覺得我需要公式般的目標來做到這一點。
標準答案是
aes_string(x=name1, y=name2)
(肯定是重複的)
謝謝@baptiste看來我沒有用正確的關鍵字高效地搜索 –
我找不到重複的(雖然它是一個FAQ),但很難搜索 – baptiste
我會重新命名列或者使用plyr
沿線
library(plyr)
DF1 <- rename(DF1, c("V1" = "name1"))
或我的最好的方式,使用data.table
require(data.table)
DT <- as.data.table(DF1)
setnames(DT, "V1","name1")
然後
ggplot(DT, aes(x=name1,y=name2))+geom_line()
設置一些V1
列工作等通常是適得其反的,而且是錯誤的或易發
UPDATE
感謝您的幫助@Severin Pappadeux。 baptiste的方式更容易,所以我給他信貸。 –
我只是弄清楚,得到()將工作!
ggplot(DF1,aes(x=get(name1),y=get(name2)))+geom_line()
R基本改變列名:
colnames(DF1)[colnames(DF1)=="V1"] <- "Name 1"
只有在情節?繪圖之前的setNames可能會工作 –
感謝您的評論。你的意思是像setNames(V1,「name1」)或setNames(DF1 $ V1,「name1」)?我試過了,它不起作用。 –