根据向量重命名列

bvo*_*owe 5 r rename dplyr

set.seed(0)
data=data.frame("V1"=sample(1:10,size=4,rep=T),
                "V2"=sample(1:10,size=4,rep=T),
                "V3"=sample(1:10,size=4,rep=T),
                "V4"=sample(1:10,size=4,rep=T))

names = data.frame("vars"=c("V1", "V2", "V3", "V4"),
                   "labels"=c("whale","toast","cheese","cow"))


want=data.frame("whale"=sample(1:10,size=4,rep=T),
                "toast"=sample(1:10,size=4,rep=T),
                "cheese"=sample(1:10,size=4,rep=T),
                "cow"=sample(1:10,size=4,rep=T))
Run Code Online (Sandbox Code Playgroud)

我有数据、“数据”和一个数据框“名称”,其中包含“数据”的列名称和变量标签。

我想创建新的数据“想要”,它将“数据”中的变量名称替换为“名称”中的变量标签,但请注意,实际值不同,因为我不知道如何确保相同的采样值!

akr*_*run 8

我们可以使用rename_atfrom dplyr(假设“names”数据集中的列是character类)

library(dplyr)
data <- data %>% 
            rename_at(vars(names$vars), ~ names$labels)
data
#   whale toast cheese cow
#1     9     2      1   6
#2     4     7      5  10
#3     7     2      5   7
#4     1     3     10   9
Run Code Online (Sandbox Code Playgroud)

或者通过ing转换为命名向量deframe然后直接匹配

names %>% 
     mutate_all(as.character) %>%
     deframe %>%
     {set_names(data, .[names(data)])}
Run Code Online (Sandbox Code Playgroud)


Tje*_*ebo 6

使用命名向量的另一个选项,但带有renameand !!!

library(dplyr)

# make your named vector (maybe easier to do this directly instead of creating 
#   the data frame first), e.g. 
# name_vec <- setNames(c("V1", "V2", "V3", "V4"), 
#                      c("whale", "toast", "cheese", "cow"))

name_vec <- setNames(as.character(names$vars),as.character( names$labels))

data %>% rename(!!!name_vec)

#>   whale toast cheese cow
#> 1     9     2      1   6
#> 2     4     7      5  10
#> 3     7     2      5   7
#> 4     1     3     10   9
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-02-09 创建


小智 3

你要这个吗?使用你的例子:

> names(data) <- names$labels
> names(data)
[1] "whale"  "toast"  "cheese" "cow"   
Run Code Online (Sandbox Code Playgroud)