如何提取R中的特定字符串并放入另一列?

如何提取R中的特定字符串并放入另一列?,r,regex,R,Regex,我有这样的数据,下面是我的数据集中的3行: total=7871MB;free=5711MB;used=2159MB;shared=0MB;buffers=304MB;cached=1059MB; free=71MB;total=5751MB;shared=3159MB;used=5MB;buffers=30MB;cached=1059MB; cached=1059MB;total=5751MB;shared=3159MB;used=5MB;buffers=30MB;free=109MB; 预

我有这样的数据,下面是我的数据集中的3行:

total=7871MB;free=5711MB;used=2159MB;shared=0MB;buffers=304MB;cached=1059MB;
free=71MB;total=5751MB;shared=3159MB;used=5MB;buffers=30MB;cached=1059MB;
cached=1059MB;total=5751MB;shared=3159MB;used=5MB;buffers=30MB;free=109MB;
预期产出如下:

total   free    used     shared  buffers  cached
7871MB  5711MB  2159MB   0MB     304MB    1059MB
5751MB  71MB    5MB      3159MB  30MB     1059MB
5751MB  109MB   5MB      3159MB  30MB     1059MB
这里的问题是我想用上面的数据做不同的列,比如
总值
自由值
使用值
共享值

我可以使用
进行拆分但在其他行中,值被洗牌,比如第一个值是自由值,然后是合计值,然后是其他值


如果我们找到total get value直到
,有没有办法在中使用正则表达式并放入一列,如果我们找到自由值,直到
并放入另一列?

这里有一种可能使用
strsplit

df <- as.data.frame(matrix(unlist(lapply(strsplit(x, ";"), strsplit, "=")), nrow = 2))
colnames(df) = df[1,]
df = df[-1,]
df

#    total   free   used shared buffers cached
# 2 7871MB 5711MB 2159MB    0MB   304MB 1059MB

df这里有一种可能使用
strsplit

df <- as.data.frame(matrix(unlist(lapply(strsplit(x, ";"), strsplit, "=")), nrow = 2))
colnames(df) = df[1,]
df = df[-1,]
df

#    total   free   used shared buffers cached
# 2 7871MB 5711MB 2159MB    0MB   304MB 1059MB

df我们可以尝试使用
strsplit
后跟
sub
将数据与标签分开。然后,使用此数据创建数据帧:

x <- 'total=7871MB;free=5711MB;used=2159MB;shared=0MB;buffers=304MB;cached=1059MB;'
y <- unlist(strsplit(x, ';'))
names <- sapply(y, function(x) gsub("=.*$", "", x))
data <- sapply(y, function(x) gsub(".*=", "", x, perl=TRUE))
df <- data.frame(names=names, data=data)
df

x我们可以尝试使用
strsplit
后跟
sub
将数据与标签分开。然后,使用此数据创建数据帧:

x <- 'total=7871MB;free=5711MB;used=2159MB;shared=0MB;buffers=304MB;cached=1059MB;'
y <- unlist(strsplit(x, ';'))
names <- sapply(y, function(x) gsub("=.*$", "", x))
data <- sapply(y, function(x) gsub(".*=", "", x, perl=TRUE))
df <- data.frame(names=names, data=data)
df

x您好,感谢您的快速回复,我知道我们可以拆分此字符串,但我面临的问题是值的格式不相同,如性能数据-------------------------------------------1)总计=7871MB;自由=5711MB;已使用=2159MB;共享=0MB;缓冲区=304MB;缓存=1059MB;2) 免费=71MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;缓存=1059MB;3) 缓存=1059MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;自由=109MB;非常感谢您,感谢您的努力。它按预期工作。非常感谢您的快速回复,我知道我们可以拆分此字符串,但我面临的问题是值的格式不相同,如性能数据-------------------------------------------1)总计=7871MB;自由=5711MB;已使用=2159MB;共享=0MB;缓冲区=304MB;缓存=1059MB;2) 免费=71MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;缓存=1059MB;3) 缓存=1059MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;自由=109MB;非常感谢您,感谢您的努力。它按预期工作。非常感谢您的快速回复,我知道我们可以拆分此字符串,但我面临的问题是值的格式不相同,如性能数据-------------------------------------------1)总计=7871MB;自由=5711MB;已使用=2159MB;共享=0MB;缓冲区=304MB;缓存=1059MB;2) 免费=71MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;缓存=1059MB;3) 缓存=1059MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;自由=109MB;我看不出有什么问题。编辑您的问题并显示我的脚本失败的示例数据。您好,感谢您的快速回复,我知道我们可以拆分此字符串,但我面临的问题是值的格式不相同,如perf_data------------------1)total=7871MB;自由=5711MB;已使用=2159MB;共享=0MB;缓冲区=304MB;缓存=1059MB;2) 免费=71MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;缓存=1059MB;3) 缓存=1059MB;总数=5751MB;共享=3159MB;已使用=5MB;缓冲区=30MB;自由=109MB;我看不出有什么问题。编辑您的问题并显示脚本失败的示例数据。