簡體   English   中英

使用for循環重命名列會產生錯誤R

[英]Renaming columns using for loops gives error, R

我已經獲得了一個變量名稍微不一致且混亂的數據集。 我想以一種高效且自動化的方式對它們進行重命名。

我有一組數據框架,我需要重命名其中的一些列。 列的順序和數據幀的長度不同,因此我想使用任何函數,例如grep()或子集項( df$x[== "term"] )。

我發現了一個有關此問題的較舊的問題( 重命名多個數據幀中的列R ),但是由於收到錯誤消息,因此我無法獲得任何建議的解決方案。 我的聲譽不足,無法對這些答復發表評論並提出進一步的問題。 但是,我的問題似乎有些不同,因為我從for循環中收到了一條錯誤消息,該錯誤消息在前面的問題中沒有提到:

Error in `colnames<-`(`*tmp*`, value = character(0)) : 
  attempt to set 'colnames' on an object with less than two dimensions

設置:多個數據幀,我們稱它們為myDF1myDF2 ...在這些數據幀中,存在名稱( bad_name1bad_name2 )的列,應將其更改為其他名稱( good_name1good_name2 )。

可復制的數據集:

myDF1 <- data.frame(bad_name1="A", bad_name2="B")
myDF2 <- data.frame(bad_name1="C", bad_name2="D")

for (x in c(myDF1,myDF2)) {
colnames(x) <- gsub(x = colnames(x), pattern = "bad_name0", replacement = "good_name1")
}

有幾種方法可以做到這一點。 子集方法是吸引我的一種方法:

colnames(myDF1)[names(myDF1) == "bad_name1"] <- "good_name1")

這可以單行運行,但不能用作for循環。

for (x in c(myDF1,myDF2)) {
colnames(x)[colnames(x) == "bad_name1"] <- "good_name1"
}

呈現錯誤消息。

Error in `colnames<-`(`*tmp*`, value = character(0)) : 
  attempt to set 'colnames' on an object with less than two dimensions

相同的錯誤消息適用於基於'gsub'的方法:

for (x in c(myDF1,myDF2)) {
colnames(x) <- gsub(x = colnames(x), pattern = "bad_name1", replacement = "good_name1")
}

我意識到我錯過了這里的一些基本知識。 我想for循環沒有以適當的格式接收'colnames(x)'的結果。 但是我不明白我應該如何使它工作。 在多個數據幀的“重命名”列中建議的方法,R並未真正涵蓋此錯誤消息。

vaettchen在評論中要求進一步澄清:
必須更改3個列名(在所有數據框中)。 原因是它們具有varX.1varX.2varX.3類的名稱,而我更喜歡varXcountvarXmeanvarXmax 因此,我意識到有些名字我不滿意,並根據自己的喜好決定使用新的名字。

您只需要進行一些小的更改。 查看c(myDF1, myDF2)以了解為什么它不起作用-它將數據幀分為4個因子的列表。 將數據幀組合成一個列表並處理該列表:

all <- list(myDF1=myDF1, myDF2=myDF2)
for (x in seq_along(all)) {
colnames(all[[x]]) <- gsub(x = colnames(all[[x]]), pattern = "bad_name1",
    replacement = "good_name1")
}
list2env(all, envir=.GlobalEnv)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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