跨数据帧匹配列名称并添加新变量

问题描述 投票:0回答:1
data <- rbind(c(1,2,3,4,5,6),
              c(1,2,3,4,5,6),
              c(1,2,3,4,5,6))

colnames(data) <- c("A", "B", "C", "D", "E", "F")

category_vector <- cbind(c("A", "B", "C", "D", "E"),
                         c("Cat1", "Cat2", "Cat3", "Cat2", "Cat5"))
colnames(category_vector) <- c("Name", "Category")

我的目标是将“data”中的列名称与“category_vector”中的名称相匹配,然后将“data”的每一列分配给第 1 行中相应的类别名称。

我想要的输出如下:

output <- rbind(c("Cat1", "Cat2", "Cat3", "Cat2", "Cat5", "NA"),
                c(1,2,3,4,5,6),
                c(1,2,3,4,5,6),
                c(1,2,3,4,5,6))
colnames(output) <- colnames(data)

我知道,我可以使用 match(names(x), names(y)) 来显示相交,但不确定如何获得所需的输出。

dplyr match rbind intersect mutate
1个回答
0
投票

这是一个例子:

library(dplyr)

data <- rbind(c(1,2,3,4,5,6),
             c(1,2,3,4,5,6),
             c(1,2,3,4,5,6))

colnames(data) <- c("A", "B", "C", "D", "E", "F")

category_vector <- cbind(c("A", "B", "C", "D", "E"),
                         c("Cat1", "Cat2", "Cat3", "Cat2", "Cat5"))

#colnames(category_vector) <- c("Name", "Category")

# turn everything in data into a character
data <- data |> 
    as.data.frame() |> 
    mutate(across(everything(), as.character))

category_vector <- as.data.frame(t(category_vector))

names(category_vector) <- category_vector[1, ]

category_vector <- category_vector[-1, ]

category_vector |> 
    bind_rows(data)

     A    B    C    D    E    F
1 Cat1 Cat2 Cat3 Cat2 Cat5 <NA>
2    1    2    3    4    5    6
3    1    2    3    4    5    6
4    1    2    3    4    5    6
© www.soinside.com 2019 - 2024. All rights reserved.