Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用混合值(字符串、日期、数字等)舍入数据帧中的数字_R_Dataframe_Rounding - Fatal编程技术网

R 使用混合值(字符串、日期、数字等)舍入数据帧中的数字

R 使用混合值(字符串、日期、数字等)舍入数据帧中的数字,r,dataframe,rounding,R,Dataframe,Rounding,我一直在尝试用多个值对数据框中的数字进行四舍五入,但找不到一种方法。尝试设置选项(数字=6)、主题中提供的解决方案以及其他一些选项。我的数据框看起来像: structure(list(X__1 = c("Start", "End", "EFM", "UTH", "PEU", "HPX"), `TecM` = c("Mar-00", "Mar-01", "NA", "NA", "-9.6432560109885879E-2", "-0.26834090581750103"), `TerA` =

我一直在尝试用多个值对数据框中的数字进行四舍五入,但找不到一种方法。尝试设置
选项(数字=6)
、主题中提供的解决方案以及其他一些选项。我的数据框看起来像:

structure(list(X__1 = c("Start", "End", "EFM", "UTH", "PEU", 
"HPX"), `TecM` = c("Mar-00", "Mar-01", "NA", "NA", 
"-9.6432560109885879E-2", "-0.26834090581750103"), `TerA` = c("Sep-01", 
"Sep-01", "NA", "NA", "0", "-0.11600490599886504"), `GloC` = c("Nov-07", 
"Mar-09", "-0.62921737727223548", "NA", "-0.54549924666990268", 
"-0.54518556256613238"), `ECis` = c("Jul-11", 
"Sep-11", "-0.2912541254125412", "NA", "-0.21781440969547586", 
"-0.18769305803934319"), `OSe` = c("Jul-14", "Dec-14", 
"-0.10996326905417812", "-3.4236420002695674E-2", "-2.8281230134625412E-2", 
"4.8566639665387892E-2")), .Names = c("X__1", "TecM", 
"TerA", "GloC", "ECis", 
"Oil Selloff"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-6L))

有什么简单的选择吗?

我想也有一个
tibble
解决方案,但在
tibbles
中选择列等时,我总是感到困惑。这就是为什么我将其更改为
data.frame

jnk1 <- as.data.frame(jnk)
numeric_values <- !is.na(apply(jnk1, 2, as.numeric))
jnk1[numeric_values] <- round(as.numeric(jnk1[numeric_values]),1)

我想也有一个
tibble
解决方案,但我总是对在
tibbles
中选择列等感到困惑。这就是为什么我将其更改为
data.frame

jnk1 <- as.data.frame(jnk)
numeric_values <- !is.na(apply(jnk1, 2, as.numeric))
jnk1[numeric_values] <- round(as.numeric(jnk1[numeric_values]),1)
如果只是为了便于查看,下面的一行将表中所有看起来像数字的值舍入为2位:

# assume df is your original data frame
suppressWarnings(data.frame(lapply(df, function(y) ifelse(is.na(as.numeric(y)), y, round(as.numeric(y), 2)))))

# result
   X__1   TecM   TerA   GloC   ECis Oil.Selloff
1 Start Mar-00 Sep-01 Nov-07 Jul-11      Jul-14
2   End Mar-01 Sep-01 Mar-09 Sep-11      Dec-14
3   EFM     NA     NA  -0.63  -0.29       -0.11
4   UTH     NA     NA     NA     NA       -0.03
5   PEU   -0.1      0  -0.55  -0.22       -0.03
6   HPX  -0.27  -0.12  -0.55  -0.19        0.05
但是数据框中带有数字/string/date的列仍然是一列字符。

如果只是为了便于查看,下面的一行将把表中所有看起来是数字的值舍入为2位:

# assume df is your original data frame
suppressWarnings(data.frame(lapply(df, function(y) ifelse(is.na(as.numeric(y)), y, round(as.numeric(y), 2)))))

# result
   X__1   TecM   TerA   GloC   ECis Oil.Selloff
1 Start Mar-00 Sep-01 Nov-07 Jul-11      Jul-14
2   End Mar-01 Sep-01 Mar-09 Sep-11      Dec-14
3   EFM     NA     NA  -0.63  -0.29       -0.11
4   UTH     NA     NA     NA     NA       -0.03
5   PEU   -0.1      0  -0.55  -0.22       -0.03
6   HPX  -0.27  -0.12  -0.55  -0.19        0.05

但是数据框中带有数字/string/date的列仍然是一列字符。

好吧,所有列都是字符。因此,尽管它们看起来像数字/日期,但它们仍然被视为字符。你需要在它们进入数据框之前对它们进行取整。@Ronaksah,它们来自Excel文件,所以我无法控制数据……哈哈,不,这是不可能的。某些字符串很长。它不是正确的
data.frame
。我建议重新塑造它(基本上是转置)。@AK88其中一个答案解决了你的问题吗?嗯,你所有的专栏都是字符。因此,尽管它们看起来像数字/日期,但它们仍然被视为字符。你需要在它们进入数据框之前对它们进行取整。@Ronaksah,它们来自Excel文件,所以我无法控制数据……哈哈,不,这是不可能的。某些字符串很长。它不是正确的
data.frame
。我建议重新塑造它(基本上是转置)。@AK88其中一个答案解决了你的问题吗?