[英]Splitting columns in a dataframe
我有一个名为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
现在,我想将数据框分成名称分别为Name,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" )
我们可以使用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 Time”和“ Elapsed”创建了一些引号后设置新数据集('df2')的列名时间”,使用gsub
(将其作为单个字符串读取)进行lookarounds
并通过scan
获得单词的vector
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 "
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.