Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.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_Import - Fatal编程技术网

将指数值作为R中的数字导入

将指数值作为R中的数字导入,r,import,R,Import,我必须自动导入许多数据集,第一列是名称,所以是字符向量,第二列是数字向量,所以我将这些规范用于read.table:colClasses=c(“字符”、“数字”) 如果我在df_文件中保存了一个数据帧,这将非常有用,如下所示: df<- data.frame(V1=c("s1","s2","s3","s4"), V2=c("1e-04","1e-04","1e-04","1e-04") read.table(df_file, header = FALSE, comment.char="

我必须自动导入许多数据集,第一列是名称,所以是字符向量,第二列是数字向量,所以我将这些规范用于read.table:colClasses=c(“字符”、“数字”)

如果我在df_文件中保存了一个数据帧,这将非常有用,如下所示:

df<- data.frame(V1=c("s1","s2","s3","s4"), V2=c("1e-04","1e-04","1e-04","1e-04")

read.table(df_file, header = FALSE,  comment.char="", colClasses = c("character", "numeric"), stringsAsFactors=FALSE)

df我认为问题在于你写的指数的形式与R风格不匹配。如果将它们作为字符向量读入,如果知道它们都是指数的,则可以将它们转换为指数。使用gsub去掉“10^(“和”)”,留下“-4”,转换为数字,然后转换回指数。可能不是最快的方法,但它很有效

从你的例子来看:

 df<- data.frame(V1=c("s1","s2","s3","s4"), V2=c("10^(-4)","10^(-4)","10^(-4)","10^(-4)"))
 df$V2 <- 10^(as.numeric(gsub("10\\^\\(|\\)", "", df$V2)))
 df
#  V1    V2
#1 s1 1e-04
#2 s2 1e-04
#3 s3 1e-04
#4 s4 1e-04

df您可以使用
readLines
首先加载数据并执行所有需要的操作,然后使用
read.table
textConnection
如下所示:

tt <- readLines("~/tmp.txt")
tt <- gsub("10\\^\\((.*)\\)$", "1e\\1", tt)
read.table(textConnection(tt), sep="\t", header=TRUE, stringsAsFactors=FALSE)
  V1    V2
1 s1 1e-04
2 s2 1e-04
3 s3 1e-04
4 s4 1e-04

tt如果使用
stringsAsFactors=FALSE
读入
data.frame
,则相关列应作为字符向量输入,在这种情况下,您只需执行以下操作:

transform(df, V2=eval(parse(text=V2)))

尝试类似的方法:
as.numeric(gsub(“0\\^”,“e”,gsub([()]”,“,”,df$V2))
可能与Hi-Arun重复,谢谢。所以我想没有“简单的出路”?也就是说,如果我想这样做,我必须首先导入第二列为“as.character”的所有数据集,然后仅当这些列具有指数项时才这样做?@user2337032,您可以使用
readLines
。我已经发布了一个答案。谢谢你,阿伦,你的功能也可以!谢谢,这很有效。我只是首先作为字符导入,并用grep检查是否有“^”,然后使用您的代码。非常感谢。这可能会比首先读取所有文件更快,而且对我来说更好,因为我的文件很大!非常感谢。尽管如此,我认为作为一个带有单独列的数据框重新导入还是有问题的:tt这是因为您使用的是
\(
而不是
\(
\)
而不是
\)
。你应该逃两次。这要简单得多!只有一个问题,如果我有colnames(所以header=TRUE)并想替换第二列,我将如何使用它?这给了我一个错误:df[,2]警告消息:在
[你能发布
dput(head(df,5))
的输出吗?是的,当然,>dput(head(df,5))结构(list(V1=结构(1:4,.Label=c(“s1”,“s2”,“s3”,“s4”),class=”factor”),V2=结构(c(1L,1L,1L,1L),.Label=“10^(-4)”,class=”factor”),.Names=c(“V1”,“V2”,“V2”),row.Names=c(NA,4L),class=“data.frame”)将V2列作为一个因子。您必须将其转换为字符,或者使用
as.is=TRUE
重新读取它。出现错误的原因是您需要
df
transform(df, V2=eval(parse(text=V2)))