具有不同十进制数的值的 rbind 数据帧
rbind data frames with values with different decimal numbers
在这个例子中我rbind
两个data.frames,结果是所有的值都有两个小数。但是,我希望第 1 行和第 2 行没有小数。
one <- data.frame(matrix(c(1,2,3,4), ncol=2)); one
two <- data.frame(matrix(c(1.63,8.88,9.17,2.31), ncol=2)); two
rbind(one, two)
可能是这样的:
test<-formatC(as.matrix(two),digits=2,format="f")
rbind(one,test)
您可以使用 sprintf
但这会将您的变量转换为字符(而不是数字),即
d1 <- rbind(one, two)
d1[] <- lapply(d1, function(i) sprintf('%.6g', i))
这给出了,
X1 X2
1 1 3
2 2 4
3 1.63 9.17
4 8.88 2.31
但是结构是,
str(d1)
'data.frame': 4 obs. of 2 variables:
$ X1: chr "1" "2" "1.63" "8.88"
$ X2: chr "3" "4" "9.17" "2.31"
如果将其转换为数字,您将再次得到这些小数,即
sapply(d1, as.numeric)
# X1 X2
#[1,] 1.00 3.00
#[2,] 2.00 4.00
#[3,] 1.63 9.17
#[4,] 8.88 2.31
在这个例子中我rbind
两个data.frames,结果是所有的值都有两个小数。但是,我希望第 1 行和第 2 行没有小数。
one <- data.frame(matrix(c(1,2,3,4), ncol=2)); one
two <- data.frame(matrix(c(1.63,8.88,9.17,2.31), ncol=2)); two
rbind(one, two)
可能是这样的:
test<-formatC(as.matrix(two),digits=2,format="f")
rbind(one,test)
您可以使用 sprintf
但这会将您的变量转换为字符(而不是数字),即
d1 <- rbind(one, two)
d1[] <- lapply(d1, function(i) sprintf('%.6g', i))
这给出了,
X1 X2 1 1 3 2 2 4 3 1.63 9.17 4 8.88 2.31
但是结构是,
str(d1)
'data.frame': 4 obs. of 2 variables:
$ X1: chr "1" "2" "1.63" "8.88"
$ X2: chr "3" "4" "9.17" "2.31"
如果将其转换为数字,您将再次得到这些小数,即
sapply(d1, as.numeric)
# X1 X2
#[1,] 1.00 3.00
#[2,] 2.00 4.00
#[3,] 1.63 9.17
#[4,] 8.88 2.31