r - 对一行数据帧进行子集化从数字中删除零小数

tos*_*pig 1 r

数据

给定一个数据框架

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   
Run Code Online (Sandbox Code Playgroud)

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

> 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
Run Code Online (Sandbox Code Playgroud)

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

笔记

子集两行保持 .0

> df[1:2,]
  id    a    b
1  1 10.0 10.1
2  2 11.2 11.9
Run Code Online (Sandbox Code Playgroud)

Mol*_*olx 5

我假设您理解这是打印数字的问题,而不是关于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
Run Code Online (Sandbox Code Playgroud)

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

> df2 <- data.frame(a=c(1.00001, 1), b=1:2)
> df2
        a b
1 1.00001 1
2 1.00000 2
Run Code Online (Sandbox Code Playgroud)

现在,如果我只打印具有非整数的行:

> df2[1,]
        a b
1 1.00001 1
Run Code Online (Sandbox Code Playgroud)