【问题标题】:Can I create a data.frame in R from an existing data.frame by assigning a list of col.names?我可以通过分配 col.names 列表从现有的 data.frame 在 R 中创建一个 data.frame 吗?
【发布时间】:2016-02-22 06:17:11
【问题描述】:

我有一个 data.frame,我为每个 column.name 分配一个变量向量:

dat1 <- data.frame(a=1:5,b=1:5,c=1:5)

我想创建一个新的 data.frame,但不是单独分配每一列,而是一次分配所有列。例如,如果我想全部重命名:

dat.new <- data.frame(paste(names(dat1),'1',sep='') = dat1)

这显然行不通。有没有办法让它工作?

我知道我可以使用names() 重命名,但这实际上看起来很有用的场景是,如果组合多个共享相同 col.names 的数据集(并且我不想简单地 rbind):

dat1 <- data.frame(a=1:5,b=1:5,c=1:5)
dat2 <- data.frame(a=6:10,b=6:10,c=6:10)
dat.new <- data.frame(paste(names(dat1),'1',sep='') = dat1, paste(names(dat1),'2',sep='') = dat2)

【问题讨论】:

  • 这是你想要的吗:data.frame(setNames(dat1, paste0(names(dat1), "1")), setNames(dat2, paste0(names(dat1), "2")))

标签: r dataframe names renaming


【解决方案1】:
library(dplyr)
library(tidyr)
library(magrittr)

好的,这是第一部分:

dat2 = 
  dat1 %>%
  setNames(names(.) %>% 
             paste0("1") )

这是第二部分。重塑有点复杂但更灵活,特别是如果您的行 id 已经具有不同数量的行:

list(dat1, dat2) %>%
  bind_rows(.id = "number") %>%
  group_by(number) %>%
  mutate(id = 1:n()) %>%
  gather(variable, value, -number, -id) %>%
  unite(new_variable, variable, number) %>%
  spread(new_variable, value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 2015-04-30
    • 2012-04-16
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多