gpt4 book ai didi

r - 在数据框的列上运行 factor() 时出错

转载 作者:行者123 更新时间:2023-12-01 12:30:41 24 4
gpt4 key购买 nike

我有一个包含多个列的数据框。我想在其中一列上运行 factor() 函数,比如名称 my_col。最初我是这样做的

df[,"my_col"]<-factor((df[,"my_col"]))

报错如下

Error: 'x' must be atomic for 'sort.list' Have you called 'sort' on a list?

关于 similar question这样我的问题就解决了。

现在,如果我尝试下面的代码而不是第一种方法,它可以完美运行而不会出现任何错误

df$"my_col"<-factor(df$"my_col")

这是为什么呢?通过 df$vec_name 和 df[,vec_name] 访问列之间有区别吗?

更新:

str(df)
Classes 'tbl_df', 'tbl' and 'data.frame': 160 obs. of 8 variables:
$ area : int 1 1 1 1 1 1 1 1 1 1 ...
$ temp : int 1 1 1 1 1 1 1 1 1 1 ...
$ size : int 1 1 1 1 1 1 1 1 1 1 ...
$ storage : int 1 1 1 1 1 2 2 2 2 2 ...
$ my_col : int 1 2 3 4 5 1 2 3 4 5 ...
$ texture : num 2.9 2.3 2.5 2.1 1.9 1.8 2.6 3 2.2 2 ...
$ flavor : num 3.2 2.5 2.8 2.9 2.8 3 3.1 3 3.2 2.8 ...
$ moistness: num 3 2.6 2.8 2.4 2.2 1.7 2.4 2.9 2.5 1.9 ...

最佳答案

你的数据是一个tbl_df。我没有你的数据,但我们可以看一个使用 mtcars 的例子。

library(dplyr)

tbl_df(mtcars)[, "mpg"]
# Source: local data frame [32 x 1]
#
# mpg
# (dbl)
# 1 21.0
# 2 21.0
# 3 22.8
# 4 21.4
# 5 18.7
# 6 18.1
# 7 14.3
# 8 24.4
# 9 22.8
# 10 19.2
# .. ...

它仍然是一个数据框,而在 base R 中它会被丢弃到一个原子向量中。 dplyr:::`[.tbl_df` 不会删除单个列,就像在基础 R 的 [.data.frame 中所做的那样。这就是我们无法运行的原因factor() 就可以了。

factor(tbl_df(mtcars)[, "mpg"])
# Error in sort.list(y) : 'x' must be atomic for 'sort.list'
# Have you called 'sort' on a list?

所以你需要使用 [[,如 df[["my_col"]],或者只使用 $

df[["my_col"]] <- factor(df[["my_col"]])

注意:当您使用 $ 运算符时,您可以在列名称两边不加引号的情况下执行此操作。

df$my_col <- factor(df$my_col)

关于r - 在数据框的列上运行 factor() 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com