我找到了post,这与我的问题非常相似。 我有一个带有关键字列表的data.frame,在一个coloumn中用分号分隔,在另一列中用year分隔。我想取消关键字,而不会丢失有关年份的信息。
我可以将关键字与strsplit和unlist
分开keywords <- unlist(strsplit(df$keywords,";"))
l1 <- sapply(df$keywords, length)
Year <- rep(df$Year, l1)
length(Year)
length(keywords)
dfkeywords=data.frame(Year=Year, Keywords=keywords, stringsAsFactors = F)
但我无法生成与关键字矢量长度相同的年份矢量。
我如何以聪明的方式做到这一点?
最佳皮特
答案 0 :(得分:0)
在取消列出拆分关键字之前计算长度。所以拆分关键字
keywords = strsplit(df$keywords,";")
查找每条记录中的长度(关键字数量)
lens = lengths(keywords)
创建data.frame
data.frame(Year=rep(df$Year, lens), Keywords=unlist(keywords),
stringsAsFactors=FALSE)
答案 1 :(得分:0)
假设你有类似的东西:
df <- data.frame(keywords = c("some;text", "some;other;text", "even;more;text;here"),
Year = c(2025, 2026, 2099))
df
# keywords Year
# 1 some;text 2025
# 2 some;other;text 2026
# 3 even;more;text;here 2099
然后我建议您考虑使用我的&#34; splitstackshape&#34;中的cSplit
。封装
library(splitstackshape)
cSplit(df, "keywords", ";", "long")
# keywords Year
# 1: some 2025
# 2: text 2025
# 3: some 2026
# 4: other 2026
# 5: text 2026
# 6: even 2099
# 7: more 2099
# 8: text 2099
# 9: here 2099
其他需要考虑的方法是:
library(dplyr)
library(tidyr)
df %>%
mutate(keywords = strsplit(as.character(keywords), ";")) %>%
unnest(keywords)
library(data.table)
as.data.table(df)[, list(keywords = unlist(strsplit(as.character(keywords), ";"))),
by = Year]