【问题标题】:R changing data type in a dataframe [duplicate]R更改数据框中的数据类型[重复]
【发布时间】:2022-01-19 22:14:11
【问题描述】:

我在使用 R 中的数据框时遇到问题。我使用定义的数据类型创建数据框,但是当我附加数据时,它会更改数据类型。我不明白为什么会发生这种情况或找到解决方案。有人可以帮忙吗?

df<- data.frame(year=integer(), yes_no=character())
df[nrow(df) + 1,] = c(2022 ,"Y") 

【问题讨论】:

    标签: r dataframe types


    【解决方案1】:

    简答:

    向量有时也被称为 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"
    

    【讨论】:

    • 谢谢你,这为我解释了
    【解决方案2】:

    你可以尝试做类似的事情吗:

    df<- data.frame(year=numeric(), yes_no=character())
    df <- rbind(df, list(2022 ,"Y"))
    

    【讨论】:

    • 谢谢............
    【解决方案3】:

    事实上,代码是正确的,并且符合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"
    >
    

    希望对你有帮助!!

    亲切的问候, 奥古斯托。

    【讨论】:

    • 谢谢.........
    • 我的荣幸!如果您还需要什么,请告诉我!
    • 使用 tibble 与基本数据框并不会改变列/向量只有单一类型的事实
    猜你喜欢
    • 2017-05-09
    • 2021-08-25
    • 2019-10-25
    • 2014-01-20
    • 2023-01-21
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    相关资源
    最近更新 更多