图案框架我有数百个行的R数据帧作为组数据由R中
word Freq
seed 4
seeds 3
contract 2
contracting 2
river 1
我想组由图案数据,表示种子+种籽,看起来像
word Freq
seed 7
contract 4
river 1
图案框架我有数百个行的R数据帧作为组数据由R中
word Freq
seed 4
seeds 3
contract 2
contracting 2
river 1
我想组由图案数据,表示种子+种籽,看起来像
word Freq
seed 7
contract 4
river 1
一种选择是通过基于'word'中最小字符数提取子字符串来创建一个分组变量'gr',用'word'sp来做这一个,我们可以得到每个组的子字符串单词,然后通过'单词'获得'Freq'的sum
。
library(dplyr)
df1 %>%
group_by(gr= substr(word, 1, min(nchar(word)))) %>%
group_by(word= substr(word, 1, min(nchar(word)))) %>%
summarise(Freq= sum(Freq))
word Freq
# (chr) (int)
#1 contract 4
#2 river 1
#3 seed 7
也可以用交叉连接,这比上面的方法有点安全。
library(dplyr)
library(stringi)
df %>%
merge(df %>% select(short_word = word)) %>%
filter(short_word %>%
stri_detect_regex(word, .)) %>%
group_by(word) %>%
slice(short_word %>% stri_length %>% which.min) %>%
group_by(short_word) %>%
summarise(Freq= sum(Freq))
是的,已经看到了,但很多功能来获得这个权利。 – akrun
我也没有得到预期的输出。 –
这可能是另一种方法。在SnowballC
包中,有一个功能可以清理单词并获得单词干(即wordStem()
)。使用它,你可以跳过字符串操作,我想。一旦你完成了这个过程,你所做的就是获得词频的总和。
library(SnowballC)
library(dplyr)
mydf <- read.table(text = "word Freq
seed 4
seeds 3
contract 2
contracting 2
river 1", header = T)
mutate(mydf, word = wordStem(word)) %>%
group_by(word) %>%
summarise(total = sum(Freq))
# word total
# (chr) (int)
#1 contract 4
#2 river 1
#3 seed 7
尝试使用adist
来匹配条件up。
dat$grp <- seq(nrow(dat))
# generate a matrix comparing the vector of words to themselves
tmp <- adist(dat$word, dat$word, partial=TRUE)
diag(tmp) <- Inf
dat$grp[col(tmp)[tmp==0]] <- row(tmp)[tmp==0]
final <- aggregate(Freq ~ grp, data=dat, sum)
final$word <- dat$word[match(final$grp, dat$grp)]
# grp Freq word
#1 1 7 seed
#2 3 4 contract
#3 5 1 river
使用的数据:
dat <- data.frame(word=c("seed","seeds","contract","contracting","river"),Freq=c(4,3,2,2,1))
我不知道有上,这样做你想要的一切一个职位,但有几个,你可以放在一起解决您的问题。例如,查看[模式匹配](http://stackoverflow.com/questions/20219311/pattern-matching-and-replacement-in-r)上的这篇文章以及[摘要函数](http: //stackoverflow.com/questions/9847054/how-to-get-summary-statistics-by-group)。此外,包括[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)会改善你的帖子。正如所写,你有一个广泛的问题。 –