这是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.不能决定分隔符
最后一个字段是个问题,space
不能是分隔符,
init [2],udevd - daemon是一个字段,不能用space
分隔
2.没有固定宽度
每条线都有不同的宽度。
那么,如何将data.txt读入data.frame?
答案 0 :(得分: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
答案 1 :(得分:2)
这是一个可以解决这个问题的单线程序:
do.call(rbind, lapply(strsplit(readLines("data.txt"), "\\s+"), function(fields) c(fields[1:10], paste(fields[-(1:10)], collapse = " "))))
这就是它的详细内容:
通过readLines
读取文件的所有行(得到一个字符向量,其中每个向量元素是文件的一行)
使用strsplit
将每一行拆分为由空格分隔的条带(\\s+
)
对于每一行(lapply
),将第10个字段之后的所有字段合并为一个(通过paste(..., collapse = " ")
)---这会创建一个列表,其中每个列表元素代表一行该文件是一个长度为11的字符向量(每个字段一个)
最后,调用rbind
将列表合并到矩阵(或数据框)
答案 2 :(得分:0)
您的数据采用何种格式?如果您可以在Excel中打开它,将其保存为制表符分区文件很可能是继续前进的最佳方式。
将文件保存为制表符分隔文件是准备导入R
数据的常用方法之一。这可以通过'另存为'.txt(tab deliminated)'在Excel中完成。完成后:
my_data <- read.table("path/to/file/", header = TRUE, sep = "\t")
sep = "\t"
告诉R您的文件已标记为