r如果存 在,则更改列名列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了r如果存 在,则更改列名列表相关的知识,希望对你有一定的参考价值。

我在一个for循环中将一个文件列表绑定在一起,但是列的措辞和位置可以是不同的。例如,id(在第1列中)和itemID(在第3列中)是相同的,但在具有不同名称的不同位置。像这样的多个列在文件中传播。是否有方法给出我想要更改的列名列表,然后是我想要的新列名。我尝试使用'setnames',但它似乎没有工作。我假设因为可能有一个文件带有我想要的名字(itemId),然后是一个不受欢迎的名字(测试者),然后是另一个文件,反之亦然(不受欢迎的'ID'和所需的'测试')

这是我正在做的一个例子:

  #change names of columns from old files
  tryCatch({
    setnames(tempPull,
             old = c("ID", "tester"),
             new = c( "ItemId", "Test"))},
    error = function(e){})

这是另一个例子。 file#是文件的外观,然后DesiredFormat是我希望它看到最后的方式。我还提供了一个需要更改的名称列表以及应该更改的名称:

file1 <- data.frame(ItemId = 1:3, Test = letters[1:3])
file2 <- data.frame(ItemId = 4:7, Tester = letters[4:7])
file3 <- data.frame(ID = 7:10, Tester = letters[7:10])
file4 <- data.frame(ID = 11:12, Test = letters[11:12])
file5 <- data.frame(ID = 12:15, Testx = letters[12:15])


DesiredFormat <- data.frame(ItemId = 1:15, Test = letters[1:15])

oldnames <- c("ID", "Tester", "Testx")
newnames <- c("ItemId", "Test", "Test")
答案

我想到的一个解决方案是在dplyr包中使用重命名功能:

df %>% select(a,b,c) %>% rename(d = a, e = b, f = c)

或者使用匹配

main_col <- c('a','b','c')
df.rename <- df %>% 
             dplyr::select(one_of(main_col))
namekey <- c(a = 'd', b = 'e', c = 'f')
names(df.rename) <- namekey[names(df.rename)]

希望能帮助到你。顺便提一下,@ MrFlick提到,你应该放一个可重复的例子:)

另一答案

如果有更优雅的方式,请告诉我。我正在使用@Blue Phoenix响应的一部分,但是需要一些额外的步骤才能获得所有列。

  #a list of columns to be renamed
  #through out the files
  chgCols <- c("ID", "Tester", "Testx")

  #the names the columns will be changed to
  namekey <- c(ID = "ItemId", Tester = "Test", Testx = "Test")

  chgCols <- match(chgCols, colnames(tempPullList_2018))     #find any unwanted column indexes in data frame
  chgCols <- chgCols[!is.na(chgCols)]                        #remove NA's if column found
  chgCols <- colnames(tempPullList_2018[, chgCols])          #match indexes to column names
  namekey    <- namekey[chgCols]                             #associate name to be changed to namekey

  tempPullList_2018 <- tempPullList_2018 %>% rename(namekey) #rename the columns in data frame


  PullList_2018 <- rbindlist(list(PullList_2018, tempPullList_2018), fill = T)

以上是关于r如果存 在,则更改列名列表的主要内容,如果未能解决你的问题,请参考以下文章

R - 如果在列表中找不到,则更改值

如果 SQLite 为空或有记录,则更改片段中的视图

更改 R 中的某些列名 [重复]

返回片段后ListView为空

在方向更改时保留列表片段中的列表

更改列表视图中图像的可见性