2017-10-22 97 views
0

我有一个带有列名的csv文件(myNames)。它是1 x 66.我想用这些名称来重命名我在另一个数据框中的66列。我正在尝试使用colnames(df)[]<-(myNames)但我得到了错误的结果。我试图用as.vector,as.array,as.list来做到这一点,但没有成功。R,导入列名称

  1. 是否有更直接的方式来读取一个CSV文件到数组? 或
  2. 如何从我的数据框中获取可在colnames()中使用的数组?

这里的myNames:

v1  v2  v3  v4 v5  v6  v7 
Tom Dick Harry John Paul George Ringo 

我想,让汤姆,迪克,哈里在MYDATA我的新列名。

+2

您首先使用什么函数来读取您的csv(myNames)? –

+3

一个可重复的例子会很有帮助,但是:'colnames(df)< - as.character(unlist(myNames [1,]))'?另请参阅'?scan' –

回答

1

试试这个:

library(tidyverse) 

# Reproducible example 
df <- ("Tom Dick Harry John Paul George Ringo") 
df <- read.table(text = df) 

# Change column names 
names(df) <- as.matrix(df[1, ]) 

# Remove row 1 
df <- df[-1, ] 

# Convert to a tibble 
df %>% 
    as_tibble() %>% 
    mutate_all(parse_guess) %>% 
    glimpse() 

以上的回报代码:

Observations: 0 
Variables: 7 
$ Tom <chr> 
$ Dick <chr> 
$ Harry <chr> 
$ John <chr> 
$ Paul <chr> 
$ George <chr> 
$ Ringo <chr> 

你可以把它变成一个功能:

rn_to_cn <- function(dataframe){ 
    x <- length(colnames(dataframe)) 
    y <- length(unique(matrix(dataframe))) 
    if(x > y){ 
    stop("Can't have duplicate column names.") 
    } else { 
    message("It worked!") 
    } 
    names(dataframe) <- as.matrix(dataframe[1, ]) 
    dataframe <- dataframe[-1, ] 
    dataframe %>% 
    as_tibble() %>% 
    mutate_all(parse_guess) 
} 

,然后执行此:

rn_to_cn(df) 

# A tibble: 0 x 7 
# ... with 7 variables: Tom <chr>, Dick <chr>, Harry <chr>, John <chr>, 
# Paul <chr>, George <chr>, Ringo <chr>