簡體   English   中英

如果string包含列的一部分,則R - sum值

[英]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_tokenstidytext庫:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM