我有一个数据集,其中的主题标签列包含可变数量的主题标签,并用<!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)
}
在这里似乎并不适用。非常感谢。
答案 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
,它将自动选择数据中所有可能的定界符