数据
给定一个数据框架
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)
我假设您理解这是打印数字的问题,而不是关于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)