5

这是data.txt:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
root         1  0.0  0.0   2280   728 ?        Ss   20:44   0:00 init [2]    
root         2  0.0  0.0      0     0 ?        S    20:44   0:00 [kthreadd]  
root       202  0.0  0.0      0     0 ?        S<   20:44   0:00 [ext4-dio-unwri  
root       334  0.0  0.1   2916  1452 ?        Ss   20:44   0:00 udevd --daemon  

如何将数据读入data.frame?
1.can not to determine separator
最后一个字段有问题,space不能是分隔符,
init [2] ,udevd --daemon 是一个字段,不能用.分隔space
2.没有固定宽度
,每条线都有不同的宽度。

那么,我怎样才能将 data.txt 读入 data.frame?

4

3 回答 3

4

我会这样做:

library(stringr) # has a convenient function for splitting to a fixed length 

raw          <- system("ps aux", intern = TRUE)
fields       <- strsplit(raw[1], " +")[[1]]
ps           <- str_split_fixed(raw[-1], " +", n = length(fields))
colnames(ps) <- fields
于 2013-01-21T12:47:42.047 回答
2

这是一个可以解决问题的单线:

do.call(rbind, lapply(strsplit(readLines("data.txt"), "\\s+"), function(fields) c(fields[1:10], paste(fields[-(1:10)], collapse = " "))))

这是它的详细操作:

  1. 通过读取文件的所有行readLines(产生一个字符向量,其中每个向量元素都是文件的一行)

  2. 用于strsplit将每一行拆分为由空格分隔的字符串 ( \\s+)

  3. 对于每一行(lapply),将第 10 个字段之后的所有字段合并为一个(通过paste(..., collapse = " "))---这将创建一个列表,其中每个列表元素代表文件的一行,并且是长度为 11 的字符向量(每个字段一个)

  4. 最后,调用rbind将列表合并为矩阵(或数据框)

于 2013-04-07T10:15:33.207 回答
0

你的数据是什么格式的?如果您可以在 Excel 中将其打开,则将其保存为制表符分层文件很可能是前进的最佳方式。

将文件另存为制表符分隔文件是准备数据以导入R. 这可以通过“另存为”“.txt(制表符分隔)”在 Excel 中完成。一旦完成:

my_data <- read.table("path/to/file/", header = TRUE, sep = "\t")

sep = "\t"告诉 R 你的文件是制表符分隔的

于 2013-01-21T03:29:06.530 回答