Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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
使用R操作数据集_R_Sorting_Dataset_Data Manipulation - Fatal编程技术网

使用R操作数据集

使用R操作数据集,r,sorting,dataset,data-manipulation,R,Sorting,Dataset,Data Manipulation,我有一组data.txt数据集,其中一些是这样的 1.0 DOO SB009101V 222429.80 2588228.00 12 GR 1 LIN CALI 1 LIN NPHI 1 LIN PHIE 1 LIN RHOB 1 LIN DT 1 LIN K_AIR 2 LOG KLINK_PERM 1 LIN GRAIN_DENSITY 1 LIN POR 1 LIN Core disc 0 No 1 Yes Perforation disc 0 No 1 Yes 222444.7 2

我有一组data.txt数据集,其中一些是这样的

1.0
DOO
SB009101V 222429.80 2588228.00
12
GR 1 LIN
CALI 1 LIN
NPHI 1 LIN
PHIE 1 LIN
RHOB 1 LIN
DT 1 LIN
K_AIR 2 LOG
KLINK_PERM 1 LIN
GRAIN_DENSITY 1 LIN
POR 1 LIN
Core disc 0 No 1 Yes
Perforation disc 0 No 1 Yes
  222444.7  2588243.0  7381.00   -999.000     11.320   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000     0     0
虽然这显示了两行数据,但实际上只有一行,前三个数字分别表示X、Y、Z,其他数据分别对应于GR-CALI-NPHI-PHIE RHOB DT K_-AIR Kling_PERM-GRAIN_-DENSITY POR岩心穿孔

我想要一个R中的代码,可以将上面的数据转换成如下内容

Xcoord Ycoord Zcoord GR CALI NPHI PHIE RHOB DT K_AIR KLINK_PERM GRAIN_DENSITY POR Core Perforation
  222444.7  2588243.0  7381.00   -999.000     11.320   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000   -999.000     0     0
忽略前4行数据,一些数据集也缺少CALI、K_AIR等列名。是否仍要为它们创建一列并插入NA作为值,直到n=nrow

到目前为止,我已经设法在excel中手动编辑它们,然后根据需要通过子集操作数据,但我有400多个数据集要处理。有什么帮助/指导吗

问候 湿婆像这样吗

files <- list.files(path = "path/to/data/folder", pattern = ".dat", full.names = TRUE)
data <- lapply(files, read.table, skip = 16, col.names = c("Xcoord", "Ycoord", "Zcoord", "GR", "CALI", "NPHI", "PHIE", "RHOB", "DT", "K_AIR", "KLINK_PERM", "GRAIN_DENSITY", "POR", "Core", "Perforation"))

files我注意到您可能又以不同的格式发布了这个问题。这是一个公共论坛,人们乐于提供帮助。然而,简化别人的生活是你们的工作,你们需要付出一些努力

话虽如此,下面是我为帮助您编写的一些代码

步骤0:创建第一个数据集:

sink("test.txt")  # This will `sink` all the output to the file "test.txt"

# Lets start with some dummy data
cat("1\n")
cat("DOO\n")
cat(c(sample(letters,10),"\n"))
cat(c(sample(letters,10),"\n"))
cat(c(sample(letters,10),"\n"))
cat(c(sample(letters,10),"\n"))

# Now a 10 x 16 dummy data matrix:
cat(paste(apply(matrix(sample(160),10),1,paste,collapse = "\t"),collapse = "\n"))
cat("\n")

sink()            # This will stop `sink`ing.
我在前6行中创建了一些虚拟数据,然后是一个10 x 16的数据矩阵

注意:原则上,您应该提供类似的内容,或者数据集的副本。这会帮助其他人帮助你

步骤1:现在我们需要读取该文件,并希望跳过包含不需要的信息的前6行:

(temp <- read.table(file="test.txt", sep ="\t", skip = 6))
检查解决方案是否有效。如果工作正常,则转到下一步,否则进行必要的更改

步骤4:自动化:

首先,我们需要创建所有400个文件的列表。 最简单的方法(也可以解释)是复制目录中的400个文件,然后将其设置为工作目录(使用
setwd

现在,我们首先创建一个包含所有文件名的向量:

fileNameList <- dir()

希望这有帮助

使用
skip from?read.table
并非所有文件都有16行垂直行,因此skip=16不够动态。
names(temp) <- namesVec
temp
write.table(temp,file="test-clean.txt",row.names = FALSE,sep = "\t",quote = FALSE)
fileNameList <- dir()
convertFiles <- function(fileName) {
  temp <- read.table(file=fileName, sep ="\t", skip = 6)
  names(temp) <- namesVec  
  write.table(temp,file=paste("clean","test.txt",sep="-"),row.names = FALSE,sep = "\t",quote = FALSE)
}
sapply(fileNameList,convertFiles)