r - 将多列拆分成行

标签 r split strsplit splitstackshape

这个问题在这里已经有了答案:





Split comma-separated strings in a column into separate rows

(6 个回答)


5年前关闭。




我正在处理一组非常原始的数据,需要对其进行整形才能使用它。我正在尝试根据分隔符拆分选定的列 '|'

d <- data.frame(id = c(022,565,893,415),
     name = c('c|e','m|q','w','w|s|e'), 
     score = c('e','k|e','e|k|e', 'e|o'))

是否可以将数据帧拆分为一个,以便最终看起来像这样。
df <- data.frame(id = c(22,22,565,565,565,565,893,893,893,415,415,415,415,415,415),
            name = c('c','e','m','m','q','q','w','w','w','w','w','s','s','e','e'),
            score = c('e','e','k','e','k','e','e','k','e','e','o','e','o','e','o'))

到目前为止,我已经尝试了各种不同的字符串拆分功能,但运气不佳:(

有人可以帮忙吗?

最佳答案

这是一个简单的基本 R 方法,分为两步:

1)拆分列:

x <- lapply(d[-1], strsplit, "|", fixed = TRUE)

2)扩展合并:
d2 <- setNames(do.call(rbind, Map(expand.grid, d$id, x$name, x$score)), names(d)) 

结果是:
#    id name score
#1   22    c     e
#2   22    e     e
#3  565    m     k
#4  565    q     k
#5  565    m     e
#6  565    q     e
#7  893    w     e
#8  893    w     k
#9  893    w     e
#10 415    w     e
#11 415    s     e
#12 415    e     e
#13 415    w     o
#14 415    s     o
#15 415    e     o

关于r - 将多列拆分成行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40591091/

相关文章:

R 以错误消息 : This application has requested the Runtime to terminate it in an unusual way 终止

regex - 提取逗号分隔的字符串

r - 迭代 lapply 时打印列表名称

从数据框中删除标题为空的列

r - 如何在 Azure 上交互式运行 Docker 容器

MySQL - 从字符串中返回两个不同字符中最左边的字符

php - 将大文件分成两半

sql - 如何根据用户在 SQL 中输入的内容将日期时间拆分为周/月

使用 splitstring 对 R 中的字符串重新排序

正则表达式;删除所有标点符号,除了