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)
我有数据、“数据”和一个数据框“名称”,其中包含“数据”的列名称和变量标签。
我想创建新的数据“想要”,它将“数据”中的变量名称替换为“名称”中的变量标签,但请注意,实际值不同,因为我不知道如何确保相同的采样值!
我们可以使用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)
使用命名向量的另一个选项,但带有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)