我有一个名为a的数据框,其中包含1个具有以下结构的变量
Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time
Idle 0 0 4 0 0 13:26:52.515 4:18:08.670
System 4 8 148 1199 1616 0:10:14.750 4:18:08.670
smss 388 11 2 49 336 0:00:00.109 4:18:08.597
现在我想将数据框拆分为名称,Pid,Pro,Thd,Hnd等名称的列。
我试过strsplit:
df<-strsplit(a," ")
但结果就好像它们被分成了所有那些有空格的角色。 请帮忙
> dput(a)
c("Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time ",
"Idle 0 0 4 0 0 13:26:52.515 4:18:08.670",
"System 4 8 148 1199 1616 0:10:14.750 4:18:08.670",
"smss 388 11 2 49 336 0:00:00.109 4:18:08.597" )
答案 0 :(得分:1)
我们可以使用read.table
df1 <- read.table(text=a, sep='', header=TRUE, stringsAsFactors=FALSE)
df1
# Name Pid Pri Thd Hnd
#1 Idle 0 0 4 0
#2 System 4 8 148 1199
#3 smss 388 11 2 49
str(df1)
#'data.frame': 3 obs. of 5 variables:
#$ Name: chr "Idle" "System" "smss"
#$ Pid : int 0 4 388
#$ Pri : int 0 8 11
#$ Thd : int 4 148 2
#$ Hnd : int 0 1199 49
假设新对象为'a1',我们读取没有标题行的行(read.table
),然后在为“CPU”创建一些引号后设置新数据集('df2')的列名称时间“和”经过时间“使用gsub
(将作为单个字符串读取)与lookarounds
一起使用vector
scan
个字词
df2 <- read.table(text=a1[-1], sep='', header=FALSE,
stringsAsFactors=FALSE)
colnames(df2) <- scan(text=gsub('(?<=Time)\\s|\\s(?=Elapsed|CPU)',
"'", a1[1], perl=TRUE), what='', quiet=TRUE)
df2
# Name Pid Pri Thd Hnd Priv CPU Time Elapsed Time
#1 Idle 0 0 4 0 0 13:26:52.515 4:18:08.670
#2 System 4 8 148 1199 1616 0:10:14.750 4:18:08.670
#3 smss 388 11 2 49 336 0:00:00.109 4:18:08.597
a <- c("Name Pid Pri Thd Hnd",
"Idle 0 0 4 0",
"System 4 8 148 1199 ",
"smss 388 11 2 49 "
)