【问题标题】:r - subsetting one row of data frame drops zero decimal from numberr - 对一行数据帧进行子集化从数字中删除零小数
【发布时间】:2015-08-08 02:31:27
【问题描述】:

数据

给定一个数据框

df <- data.frame("id"=c(1,2,3), "a"=c(10.0, 11.2, 12.3),"b"=c(10.1, 11.9, 12.9))

> df
  id    a    b
1  1 10.0 10.1
2  2 11.2 11.9
3  3 12.3 12.9

> str(df)
'data.frame':   3 obs. of  3 variables:
 $ id: num  1 2 3
 $ a : num  10 11.2 12.3
 $ b : num  10.1 11.9 12.9   

问题

当对第一行进行子集化时,a 列中 10.0 中的 .0 小数部分被删除

> df[1,]
  id  a    b
1  1 10 10.1

> str(df[1,])
'data.frame':   1 obs. of  3 variables:
 $ id: num 1
 $ a : num 10
 $ b : num 10.1

我“假设”这是故意的,但是如何对第一行进行子集化以保留 .0 部分?

备注

子集两行保留.0

> df[1:2,]
  id    a    b
1  1 10.0 10.1
2  2 11.2 11.9

【问题讨论】:

    标签: r


    【解决方案1】:

    我假设您理解这是关于如何打印数字的问题,而不是关于 R 如何存储值的问题。无论如何,您可以使用format 来确保数字将被打印:

    > format(df[1,], nsmall = 1)
       id    a    b
    1 1.0 10.0 10.1
    > format(df[1,], nsmall = 2)
        id     a     b
    1 1.00 10.00 10.10
    

    这种行为的原因与打印的行数无关。 R 将尝试显示可能的最小小数位数。但是一列中的所有数字将具有相同的位数以改善显示:

    > df2 <- data.frame(a=c(1.00001, 1), b=1:2)
    > df2
            a b
    1 1.00001 1
    2 1.00000 2
    

    现在如果我只打印非整数行:

    > df2[1,]
            a b
    1 1.00001 1
    

    【讨论】:

    • 确实;我似乎忘记了 R 的基础知识!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多