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数据具有名称列商品怎么办?
如果此帖子是重复的,请告诉我,我将其删除。
答案 0 :(得分:1)
您要分配列向量,而不是数据帧。要分配整个数据帧,只需执行
df = dataset
如果您只想保留一些列而不是全部,请使用column subsetting(documentation):
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"
,但我将其保留为模板,以防您需要添加更多列。