R语言 无法将列名设置为数据框的子集

q5iwbnjs  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(167)

我运行下面的代码,p是加载的 Dataframe 。

a <- sort(table(p$Title))
a1 <- as.data.frame(a)
tail(a1, 7)

                     a
Maths               732
Science             737
Physics             737
Chemistry           776
Social Science      905
null              57374
                  88117

我想对上面的数据框结果做一些操作。我想给数据框添加列名。我尝试了colnames函数。

colnames(a1) <- c("category", "count")

我得到以下错误:

Error in `colnames<-`(`*tmp*`, value = c("category", "count")) : 
    attempt to set 'colnames' on an object with less than two dimensions

请建议。

o7jaxewo

o7jaxewo1#

正如我在对你的问题的评论中所说,类别是行名。一个可重复的例子:

# create dataframe p
x <- c("Maths","Science","Physics","Chemistry","Social Science","Languages","Economics","History")
set.seed(1)
p <- data.frame(title=sample(x, 100, replace=TRUE), y="some arbitrary value")

# create the data.frame as you did
a <- sort(table(p$title))
a1 <- as.data.frame(a)

得到的dataframe:

> a1
                a
Social Science  6
Maths           9
History        10
Science        11
Physics        12
Languages      15
Economics      17
Chemistry      20

看看dataframe a1的尺寸,你会得到这个:

> dim(a1)
[1] 8 1

这意味着您的 Dataframe 有8行和1列。尝试为a1 Dataframe 分配两个列名将导致错误。
您可以通过两种方式解决问题:

1:只分配一个columnname,colnames(a1) <- c("count")
2:将行名转换为类别列,然后分配列名:

a1$category <- row.names(a1)
colnames(a1) <- c("count","category")

得到的dataframe:

> a1
               count       category
Social Science     6 Social Science
Maths              9          Maths
History           10        History
Science           11        Science
Physics           12        Physics
Languages         15      Languages
Economics         17      Economics
Chemistry         20      Chemistry

您可以使用rownames(a1) <- NULL删除行名。这将给出:

> a1

  count       category
1     6 Social Science
2     9          Maths
3    10        History
4    11        Science
5    12        Physics
6    15      Languages
7    17      Economics
8    20      Chemistry

相关问题