【问题标题】:rename function in dplyr does not workdplyr 中的重命名功能不起作用
【发布时间】:2017-02-02 01:54:32
【问题描述】:

正如这篇文章的标题所暗示的,我正在尝试重命名数据框中的某些列,但代码似乎对我不起作用。没有错误信息。所以,我想知道我是做错了什么还是错过了什么。这是 MWE。

install.packages("rsdmx")
install.packages("dplyr")
library(rsdmx)
library(dplyr)
#Download data 
Assets.PIT <- readSDMX("http://widukind-api.cepremap.org/api/v1/sdmx/IMF/data/IFS/..Q.BFPA-BP6-USD")
Assets.PIT <- as.data.frame(Assets.PIT) 

names(Assets.PIT)[10]<-"A.PI.T"

# Keep the required columns 
A.port.inv.total<-Assets.PIT[c("WIDUKIND_NAME","REF-AREA","TIME_PERIOD","A.PI.T")]

所以在上面的代码中我想重命名A.port.inv.total中的一些列,所以,我使用的是:

# Rename columns
rename(A.port.inv.total, Country=WIDUKIND_NAME, year=TIME_PERIOD)

但结果输出又是:

names(A.port.inv.total)
[1] "WIDUKIND_NAME" "REF-AREA"      "TIME_PERIOD"   "A.PI.T" 

更新说明 我想将列向量 WIDUKIND_NAMETIME_PERIOD 重命名为 Countryyear

【问题讨论】:

    标签: r data-cleaning


    【解决方案1】:

    您的代码对我来说很好,但我认为您必须分配 rename 函数的结果:

    rename(A.port.inv.total, Country=WIDUKIND_NAME, year=TIME_PERIOD)
    > names(A.port.inv.total)
    [1] "WIDUKIND_NAME" "REF-AREA"      "TIME_PERIOD"   "A.PI.T"  
    
    A.port.inv.total <- rename(A.port.inv.total, Country=WIDUKIND_NAME, year=TIME_PERIOD)
    > names(A.port.inv.total)
    [1] "Country"  "REF-AREA" "year"     "A.PI.T"
    

    【讨论】:

    • 没错,它现在也适用于我。但是,它应该在没有分配的情况下工作,不是吗?在我看来这是一个严重的缺陷。
    • 是的,我不知道为什么它不能那样工作。我也对其他包的其他 rename 功能感到困惑。
    • 不仅仅是重命名。 R 中的所有对象都是不可变的(至少是您将遇到的基本对象)。您只能通过制作更改的副本并将副本重新分配给相同的名称来更改它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多