如何提取R中的特定字符串并放入另一列?
我有这样的数据,下面是我的数据集中的3行:如何提取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; 预
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;我看不出有什么问题。编辑您的问题并显示脚本失败的示例数据。