分隔字符列并在r中转换为整齐的格式

时间:2019-08-06 15:46:12

标签: r dplyr tidyr

我有一个数据集,其中的主题标签列包含可变数量的主题标签,并用<!DOCTYPE html> {% extends "base.html" %} {% block home %} <div class="project_setup"> <h1>{{object}}</h1> <form class="update" method="POST"> {{ form.as_p }} {% csrf_token %} <input type="submit" class="btn" value="Submit"> </form> <h2>Update History</h2> {% for item in object.updates.all %} <p>{{ item.added }}</p> <h4>{{ item.category }} : <span>{{ item }}</span></h4> {% endfor %} </div> {% endblock %} 分隔。例如:

;

我需要做的是将列分开并将其转换为整洁的数据。因此,每一行都包含ID和一个单独的#标签。

id  hashtags
1   #apple;#peach           
2   #apple          
3   #pear;#orange;#banana

我可以使用下面的循环来做到这一点。

id  hashtag
1   #apple          
1   #peach          
2   #apple          
3   #pear           
3   #orange         
3   #banana

但是我认为上述方法不是一个好的解决方案。我发现数据集很大(我的实际数据)时,速度非常慢。

有人能有更好更快的方法吗?请注意,每个ID的#标签数量变化很大。 library(tidyverse) df = data.frame(id=1:3, hashtags=c("#apple;#peach", "#apple", "#pear;#orange;#banana")) dat = data.frame() for (i in 1:nrow(df)) { dt = data.frame(id = df$id[i], hashtag = str_split(df$hashtags[i], ';')[[1]]) dat = bind_rows(dat, dt) } 在这里似乎并不适用。非常感谢。

1 个答案:

答案 0 :(得分:5)

选项为separate_rows,并指定sep

library(tidyverse)
df %>% 
   separate_rows(hashtags, sep=";")
#. id hashtags
#1  1   #apple
#2  1   #peach
#3  2   #apple
#4  3    #pear
#5  3  #orange
#6  3  #banana

如果我们未指定sep,它将自动选择数据中所有可能的定界符