[英]R - sum values if string contains part of a column
我有以下數據幀:
df1 <- data.frame( word = c("house, garden, flower", "flower, red", "garden, tree, forest", "house, window, door, red"),
value = c(10,12,20,5),
stringsAsFactors = FALSE
)
現在我想總結每個單詞的值。 這意味着該表應如下所示:
word | value
house | 15
garden | 30
flower | 22
...
我現在找不到解決方案。 有人有解決方案嗎?
下面是使用一個例子unnest_tokens
從tidytext
庫:
library(tidyverse)
library(tidytext)
df1 %>%
unnest_tokens(word, word) %>%
group_by(word) %>%
summarize(value = sum(value))
您可以使用strsplit
獲得所有單詞總結,然后使用sapply
來總結單詞。
Words = unique(unlist(strsplit(df1$word, ",\\s*")))
sapply(Words, function(w) sum(df1$value[grep(w, df1$word)]))
house garden flower red tree forest window door
15 30 22 17 20 20 5 5
一個選項可能是使用splitstackshape::cSplit
分隔多列中的word
列,然后使用tidyr::gather
。 最后以長格式處理數據。
library(tidyverse)
library(splitstackshape)
df1%>% cSplit("word", sep = ",", stripWhite = TRUE) %>%
mutate_at(vars(starts_with("word")), funs(as.character)) %>%
gather(key, word, -value) %>%
filter(!is.na(word)) %>%
group_by(word) %>%
summarise(value = sum(value)) %>%
as.data.frame()
# word value
# 1 door 5
# 2 flower 22
# 3 forest 20
# 4 garden 30
# 5 house 15
# 6 red 17
# 7 tree 20
# 8 window 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.