创建数据时,它没有名称

时间:2018-10-12 09:43:53

标签: r dataframe

dataset=structure(list(goods = structure(1:6, .Label = c("a", "b", "c", 
"d", "e", "f"), class = "factor")), .Names = "goods", class = "data.frame", row.names = c(NA, 
-6L))

  goods
1     a
2     b
3     c
4     d
5     e
6     f

我想创建新数据,很简单

df1=dataset$goods

,但之后df1没有名称列商品。 为什么?

str(df1)
 Factor w/ 6 levels "a","b","c","d",..: 1 2 3 4 5 6

如您所见,它没有命名为goods df1数据具有名称列商品怎么办?

如果此帖子是重复的,请告诉我,我将其删除。

2 个答案:

答案 0 :(得分:1)

您要分配列向量,而不是数据帧。要分配整个数据帧,只需执行

df = dataset

如果您只想保留一些列而不是全部,请使用column subsettingdocumentation):

df = dataset[, "goods", drop = FALSE]

drop = FALSE在这里是必需的,因为否则数据框子集运算符将返回向量,而不是具有单列的数据框(这可能是一个错误,这就是tidyverse tibble行为不同的原因。)

使用tidyverse运算(也称为“现代” R方式),将写为

library(dplyr)
df = select(dataset, goods)

答案 1 :(得分:0)

df1=data.frame(goods=dataset$goods, stringsAsFactors=F)可以很好地工作,或者您可以使用更长但更明确的内容:

ds <- dataset[,c("goods")]
df1=data.frame(goods=dataset$goods)
library(dplyr)
ds <- dataset[,c("goods")] %>% as.data.frame(stringsAsFactors=F)
colnames(ds) <- "goods"

edit:添加了stringsAsFactors选项,因为它对于控制是否希望因子转换非常有用。 c("goods")等效于"goods",但我将其保留为模板,以防您需要添加更多列。