【问题标题】:Conditional column header replacement with a data frame column in R用R中的数据框列替换条件列标题
【发布时间】:2020-10-23 01:45:06
【问题描述】:

我已经合并了几个数据框,并且标题不够清晰。我需要将它们从 'Indicator' 更改为 'NEWNAMES'

我创建的数据框称为 new_names 并遵循以下模式:

**NEWNAME**   **Indicator**
Housing price  Indicator1
Water Stress    WSL

需要更改的数据框是“WS_MAT”,如下所示

     Country Year Indicator1 EMP.c WSL
     FR     2015  22         23   23
     USA    2019  1000       513  55

我试过了

colnames(WS_MAT) <- ifelse(colnames(WS_MAT)==new_names$Indicator,new_names$NEWNAME, colnames(WS_MAT))

但我收到一条错误消息: dimnames(x)

对不起,我的电脑是法语的,但据我了解,它将 colnames 视为一个函数。如果您有任何建议,请告诉我!谢谢。

【问题讨论】:

  • 您的问题已在stackoverflow.com/questions/20987295/… 得到解答。我个人会同意 Gorka 的回答,但这只是个人喜好。
  • 嘿@Rmematey,谢谢你的举报。我有几个问题。我的表格不是数据框,当我转换它时,它会改变我的标题格式,例如我的标题变成了 My.title 。我也在寻找有条件的替换,因为 new_names 表的长度与要替换的列标题不同,并且有空单元格。
  • 我不确定我理解你的意思,你认为你可以创建一个可重现的例子吗?
  • 实际上,我进一步查看了您提供的链接的答案,而乔伊的回答 stackoverflow.com/a/36010381/4606130 解决了我的部分问题。我的数据框 WS_MAT 有 235 列。我想做一个有条件的替换是因为名称替换表有空单元格。例如。 Newname Indicator 医学毕业生 MEDICALGRAD NA NURSEGRAD

标签: r replace tidyverse


【解决方案1】:

感谢您的建议@r-me-matey 和指向其他线程的指针http://stackoverflow.com/a/36010381/4606130,我得到了一个适合我的解决方案。 需要更改列名的数据框是FINAL(然后重命名为d)。 包含引用列和新名称的数据框称为 protocol

d<-data.frame(FINAL, check.names=FALSE)
Indicator<-data.frame(colnames(FINAL))
library(data.table)
existing <- match(protocol$'Indicator',names(d))
names(d)[na.omit(existing)] <- protocol$NEWNAME[which(!is.na(existing))]

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 2016-04-07
    • 2022-07-06
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多