首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的数据排列

R中的数据排列
EN

Stack Overflow用户
提问于 2019-08-20 17:14:39
回答 2查看 60关注 0票数 1

我的数据集如下所示

代码语言:javascript
复制
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中以这种形式存在:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2019-08-20 17:31:56

欢迎来到SO!使用基本R,将字母和":“替换为空,创建如下data.frame

代码语言:javascript
复制
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的建议,让它变得更短:

代码语言:javascript
复制
new_df <- as.data.frame(lapply(df, function(x) gsub("[a-z]+:","", x)))
colnames(new_df) <-  c('destaddr','srcaddr','protocol')

使用数据:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-08-20 17:35:33

使用splitstackshape包可以很容易地实现这一点,特别是当您的模式包含的列远远超过3列时:

代码语言:javascript
复制
library(splitstackshape)
newdf <- cSplit(df, 1:ncol(df), sep = ":", direction = "long")

现在删除不必要的备用行:

代码语言:javascript
复制
newdf <- newdf[-(seq(1, nrow(newdf), 2)), ]

最终输出:

代码语言:javascript
复制
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

样本数据集:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57570364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档