【发布时间】:2022-01-19 22:14:11
【问题描述】:
我在使用 R 中的数据框时遇到问题。我使用定义的数据类型创建数据框,但是当我附加数据时,它会更改数据类型。我不明白为什么会发生这种情况或找到解决方案。有人可以帮忙吗?
df<- data.frame(year=integer(), yes_no=character())
df[nrow(df) + 1,] = c(2022 ,"Y")
【问题讨论】:
我在使用 R 中的数据框时遇到问题。我使用定义的数据类型创建数据框,但是当我附加数据时,它会更改数据类型。我不明白为什么会发生这种情况或找到解决方案。有人可以帮忙吗?
df<- data.frame(year=integer(), yes_no=character())
df[nrow(df) + 1,] = c(2022 ,"Y")
【问题讨论】:
简答:
向量有时也被称为 R 中的“基本要素”,因为它们为所有复杂对象(例如数据框或拟合回归模型)奠定了基础:
c(2022, "Y")“传递”到df 的第1 行。在 R 中,原子向量包含 仅包含相同类型的元素,例如全数字,或全字符……等等……c() 函数或vector 函数构造的。在您的情况下: 字符在原子向量的层次结构中超过整数:因此 2022 被转换为字符类型。
解决方案:
df$year <- as.integer(df$year)
str(df)
'data.frame': 1 obs. of 2 variables:
$ year : int 2022
$ yes_no: chr "Y"
【讨论】:
你可以尝试做类似的事情吗:
df<- data.frame(year=numeric(), yes_no=character())
df <- rbind(df, list(2022 ,"Y"))
【讨论】:
事实上,代码是正确的,并且符合data.frame 类型的预期。我建议使用@TarJae 提到的转换或切换到如下所述的小标题:
> df <- data.frame(year=integer(), yes_no=character())
>
> class(df)
[1] "data.frame"
> class(df$year)
[1] "integer"
> class(df$yes_no)
[1] "factor"
>
> df <- tibble(year=integer(), yes_no=character())
>
> class(df)
[1] "tbl_df" "tbl" "data.frame"
> class(df$year)
[1] "integer"
> class(df$yes_no)
[1] "character"
>
希望对你有帮助!!
亲切的问候, 奥古斯托。
【讨论】: