Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
使用read.table在R中导入数据,小数点后只有2个值_R_Read.table - Fatal编程技术网

使用read.table在R中导入数据,小数点后只有2个值

使用read.table在R中导入数据,小数点后只有2个值,r,read.table,R,Read.table,我在文本文件中有一组值- 34.62365962451697,78.0246928153624,0 30.28671076822607,43.89499752400101,0 35.84740876993872,72.90219802708364,0 60.18259938620976,86.30855209546826,1 79.0327360507101,75.3443764369103,1 45.08327747668339,56.3163717815305,0 现在我在R中导入这些值-

我在文本文件中有一组值-

34.62365962451697,78.0246928153624,0
30.28671076822607,43.89499752400101,0
35.84740876993872,72.90219802708364,0
60.18259938620976,86.30855209546826,1
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0
现在我在R中导入这些值-

mydata = read.table("D:/tmp/mlclass-ex1-005/mlclass-ex2-005/R-Studio/ex2data1.txt",header=TRUE,sep=",");
但在导入时,我希望在小数点后仅使用2个值来设置值的格式

34.62365962451697,78.0246928153624,0
将作为

34.62,78.02,0
我知道我应该运行“format”来完成需要的工作,但如何在导入自身时实现同样的效果呢。 或者,如果我尝试运行

format(round(mydata,2),nsmall=2)
它抛出了错误-

Error in Math.data.frame(list(test1 = c(9L, 2L, 11L, 38L, 73L, 19L, 41L,  : 
  non-numeric variable in data frame: test1test2
阅读后我的数据结构

  str(mydata)
'data.frame':   100 obs. of  3 variables:
 $ test1   : Factor w/ 100 levels "30.05882244669796",..: 9 2 11 38 73 19 41 65 68 83 ...
 $ test2   : Factor w/ 100 levels "30.60326323428011",..: 72 15 62 80 66 36 95 21 83 14 ...
 $ admitted: int  0 0 0 1 1 0 1 1 1 1 ...

也许我误解了这个问题,但在我看来

mydata = read.table("D:/tmp/mlclass-ex1-005/mlclass-ex2-005/R-Studio/ex2data1.txt",header=TRUE,sep=",");
mydata=round(mydata,2)

应该这样做吗?

如果您的data.frame不是所有的数字,您可以使用以下内容:

mydata[] <- lapply(mydata, function(x) {if (is.numeric(x)) round(x, 2) else x})

mydata[]
round
需要一个向量。您的代码正在向它传递一个data.frame。@罗兰,尽管在帮助文本中没有描述,
round
似乎很乐意吃数据帧:
df@Henrik谢谢。我不知道。但在阅读之后,我不确定文档中是否没有这一点。我对组泛型知之甚少。@Roland:我没有先看文档就尝试了
round()
(实际上是在矩阵上)。。。成功了!只有在阅读了你的评论之后,我才回到那个人那里,注意到
round()
确实应该将向量作为参数,而不是数据帧。。。但我仍然可以确认,在我的例子中,类似于
fooround的东西抛出了我在Math.data.frame(list)中发布的错误(test1=c(9L,2L,11L,38L,73L,19L,41L,:数据框中的非数字变量:test1test2您可以使用
options(digits=2))吗
?稍后,如果需要更多或更少的数字,您可以对此进行调整。我不相信
read.table
会给您一个矩阵。它的返回值是data.frame。您使用
mydata
做了一些您没有显示给我们的事情。@Roland是的,我使用了as.matrix,但通常它不应该给我矩阵,我更新了strvalue@ABC现在你需要找出为什么你的数据被作为因子读取并修复它。@Roland是的,现在我所有的问题都通过使用StringsAsAffactors=False解决了。这不会对我的dataset@Roland,可能是的一个例子。我在之前对
dput
data的评论中问过OP。@ABC看
str(mydata)
。您的数据似乎不是以数字的形式读入的。Henrik指出了一个可能的原因,即文件中某处存在其他字符串(例如NA字符串)。