我的数据集如下所示
destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8
destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8
destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8我希望我的数据集在rstudio中以这种形式存在:
destaddr srcaddr protocol
192.168.0 231.19.0.1 8
192.168.0 231.19.0.1 8
192.168.0 231.19.0.1 8发布于 2019-08-20 17:31:56
欢迎来到SO!使用基本R,将字母和":“替换为空,创建如下data.frame:
new_df <- data.frame (
destadd = gsub('[a-z]+:', '', df$V1),
srcaddr = gsub('[a-z]+:', '', df$V2),
protocol= gsub('[a-z]+:', '', df$V3)
)
new_df
destadd srcaddr protocol
1 192.168.0 231.19.0.1 8
2 192.168.0 231.19.0.1 8
3 192.168.0 231.19.0.1 8或者,你可以在评论中使用Ankur Sinha的建议,让它变得更短:
new_df <- as.data.frame(lapply(df, function(x) gsub("[a-z]+:","", x)))
colnames(new_df) <- c('destaddr','srcaddr','protocol')使用数据:
df <- read.table(text = 'destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8
destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8
destaddr:192.168.0 srcaddr:231.19.0.1 protocol:8', header = F)发布于 2019-08-20 17:35:33
使用splitstackshape包可以很容易地实现这一点,特别是当您的模式包含的列远远超过3列时:
library(splitstackshape)
newdf <- cSplit(df, 1:ncol(df), sep = ":", direction = "long")现在删除不必要的备用行:
newdf <- newdf[-(seq(1, nrow(newdf), 2)), ]最终输出:
destaddr srcaddr protocol
192.168.0 231.19.0.1 8
192.168.0 231.19.0.1 8
192.168.0 231.19.0.1 8
样本数据集:
destaddr <- c('destaddr:192.168.0', 'destaddr:192.168.0', 'destaddr:192.168.0')
srcaddr <- c('srcaddr:231.19.0.1', 'srcaddr:231.19.0.1', 'srcaddr:231.19.0.1')
protocol <- c('protocol:8', 'protocol:8', 'protocol:8')
df <- data.frame(destaddr, srcaddr, protocol)https://stackoverflow.com/questions/57570364
复制相似问题