![](/img/trans.png)
[英]Counting number of words, seperated by comma “,”, in each column of a data frame in R
[英]R - Identify words in a comma-seperated list for a specific column in a dataframe
我在數據框中有一個特定的列,該列的每個單元格都有一個逗號分隔的單詞列表,沒有空格。 我想在每個單元格中挑選出(其中一個)兩個特定單詞的存在,當檢測到該存在時,我想創建一個由“是”填充的新列,否則該單元格為空白。
例如,我想檢測存在的兩個單詞是“test word 1”和“test word 2”(注意這兩個測試詞中的每一個都存在空格)。 列中的每個單元格的格式為“word1,word2,......”(注意沒有空格),可能包含也可能不包含兩個測試詞。
x_test <- c('test word 1','test word 2')
我嘗試了幾種方法。 但它們似乎都無法檢測到測試詞,因為整個單元格被解釋為一個大詞,
A <- strsplit(current_cell, split=",")
B <- c(unlist(strsplit(A, split=","))
C <- lapply( df['col_name'], B)
或者,該方法似乎剝離了整個列並從中創建了一個巨大的列表。
C <- gsub(",([A-Za-z])", ", \\1", df$col_name)
我也嘗試過兩個向量的交集,但這也不起作用。
無論使用什么方法來獲得 C,我們都想問類似的問題
df$test <- ifelse( C %in% x_test , 'yes', '')
我如何在不遇到上述問題的情況下在 R 中實現所有這些?
(這是我要操作的特定列的示例。在這種情況下,我針對的兩個表達式是“非必要業務”和“所有業務”):
entertainment,recreation,offices,tourism
entertainment,venues,non-essential businesses
hospitality,entertainment,fitness,beauty
all businesses
hospitality,entertainment,fitness
entertainment,religion,non-essential businesses
假設您有以下數據:
df <- data.frame(str = c("entertainment,recreation,offices,tourism",
"entertainment,venues,non-essential businesses",
"hospitality,entertainment,fitness,beauty",
"all businesses",
"hospitality,entertainment,fitness",
"entertainment,religion,non-essential businesses"))
和這些測試詞:
test_words <- c("non-essential businesses", "all businesses")
然后您可以將測試詞轉換為交替模式:
test_words_patt <- paste0(test_words, collapse = "|")
並將該模式輸入grepl
以檢測str
和ifelse
中是否存在任何測試詞,以便用“yes”和“”填充新列:
library(dplyr)
df %>%
mutate(test_word_is_present = ifelse(grepl(test_words_patt, str),
"yes",
""))
str test_word_is_present
1 entertainment,recreation,offices,tourism
2 entertainment,venues,non-essential businesses yes
3 hospitality,entertainment,fitness,beauty
4 all businesses yes
5 hospitality,entertainment,fitness
6 entertainment,religion,non-essential businesses yes
在base R
:
df$test_word_is_present <- ifelse(grepl(test_words_patt, df$str),
"yes",
"")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.