当我尝试基于单个行更改所有列名称时,为什么R不更改列名称?

时间:2019-08-05 10:00:11

标签: r dataframe

我试图将数据框中所有列的名称更改为同一数据框中一行的值。 当我在R中尝试此操作时,它将更改为不同的数字。

这是我的数据:

id | user_id | sum | date_created | date_picked

这是date_created的输出:

date_picked

我发现很难插入数据的QS201EW... Group X X.1 1 Data 2 Area All categories: Ethnic group White 3 Date : 2011 ,因为它太大了,但是所有列都是因素-这是无法更改列名的问题吗?。

这是我之前尝试过的代码:

str

2 个答案:

答案 0 :(得分:1)

是的,这是因为数据框中的所有值都是因数。

考虑此示例

df <- data.frame(col1 = LETTERS[1:3], col2 = LETTERS[4:6], col3 = LETTERS[7:9])

df
#  col1 col2 col3
#1    A    D    G
#2    B    E    H
#3    C    F    I

现在,如果您要分配名称

names(df) <- df[2, ]

df
#  2 2 2
#1 A D G
#2 B E H
#3 C F I

尝试unlist数据,然后使用as.character分配名称。

names(df) <- as.character(unlist(df[2, ]))

df
#  B E H
#1 A D G
#2 B E H
#3 C F I

答案 1 :(得分:1)

您的列是因素,这就是为什么您的代码不起作用的原因。 试试这个:

colnames(df) <- as.character(df[2, ])

但是您可以在问题开始之前解决问题。根据读取数据的方式,您可以跳过某些行。例如,如果您使用read.table读取数据,则可以指定skip参数:

mydata <- read.table("mydata.csv", sep = ",", skip = 2)

这将跳过csv文件的前两行。 此外,如果您想避免使用因素(大多数情况下都是如此),则可以使用stringsAsFactors = F