提问人:bvowe 提问时间:2/9/2020 最后编辑:tjebobvowe 更新时间:8/24/2023 访问量:7015
根据向量重命名列 [duplicate]
Rename Columns Based On Vector [duplicate]
问:
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))
我有数据、“data”和一个包含“data”和变量标签的列名的数据帧“names”。
我想创建新数据“want”,将“data”中的变量名称替换为“names”中的变量标签,但是请注意,实际值是不同的,因为我不知道如何确保相同的采样值!
答:
3赞
novica
2/9/2020
#1
你是在要求这个吗?以您的示例为例:
> names(data) <- names$labels
> names(data)
[1] "whale" "toast" "cheese" "cow"
8赞
akrun
2/9/2020
#2
我们可以使用 from(假设“names”数据集中的列是类)rename_at
dplyr
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
或者通过ing转换为命名向量,然后直接匹配deframe
names %>%
mutate_all(as.character) %>%
deframe %>%
{set_names(data, .[names(data)])}
评论
0赞
tjebo
2/9/2020
从哪里来?deframe
1赞
akrun
2/10/2020
@Tjebo对不起,它是来自library(tibble)
1赞
StupidWolf
2/9/2020
#3
您可以通过设置相同的种子来获得相同的数据框:
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"))
set.seed(0)
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))
要获得名称,最好使用 match:
want = setNames(
data.frame(data),
names$labels[match(colnames(data),names$vars)]
)
6赞
tjebo
2/9/2020
#4
另一个使用命名向量的选项,但带有 和 :rename
!!!
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
创建于 2020-02-09 由 reprex 软件包 (v0.3.0)
上一个:按组计算唯一值
下一个:R 返回第一个下划线后的所有字符
评论