我正在做一个R项目。我用的是通用问询者词典--一本有几个情感词典的词典。我从这里下载的http://www.wjh.harvard.edu/~inquirer/inquirerbasic.xls
现在,我想创建一个新列"score“,如果值为正数,该列将赋值为1
df <- read.csv("inquirerbasics.csv", header=T, stringsAsFactors=FALSE)
df3 <- subset(df, select=c(1:6))
head(df3)
Entry Source Positiv Negativ Pstv Affil
1 A H4Lvd
2 ABANDON H4Lvd Negativ
3 ABANDONMENT H4 Negativ
4 ABATE H4Lvd Negativ
5 ABATEMENT Lvd
6 ABDICATE H4 Negativ 现在我想创建一个列分数,在这里我可以为负值分配分数1,为正值分配分数3,为子值分配分数3。我该如何创建它?
发布于 2017-09-22 12:31:37
一种选择是创建一个key/val数据集,并在使用coalesce创建单个列后与原始数据集连接
library(dplyr)
keyval <- data.frame(key = c("Negativ", "Positiv", "Pstv"),
score = c(1, 1, 3), stringsAsFactors=FALSE)
df3 %>%
mutate(key = coalesce(Positiv, Negativ, Pstv)) %>%
left_join(., keyval) %>%
select(-key)
# Joining, by = "key"
# A tibble: 11,788 x 7
# Entry Source Positiv Negativ Pstv Affil score
# <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
# 1 A H4Lvd <NA> <NA> <NA> <NA> NA
# 2 ABANDON H4Lvd <NA> Negativ <NA> <NA> 1
# 3 ABANDONMENT H4 <NA> Negativ <NA> <NA> 1
# 4 ABATE H4Lvd <NA> Negativ <NA> <NA> 1
# 5 ABATEMENT Lvd <NA> <NA> <NA> <NA> NA
# 6 ABDICATE H4 <NA> Negativ <NA> <NA> 1
# 7 ABHOR H4 <NA> Negativ <NA> <NA> 1
# 8 ABIDE H4 Positiv <NA> <NA> Affil 1
# 9 ABILITY H4Lvd Positiv <NA> <NA> <NA> 1
#10 ABJECT H4 <NA> Negativ <NA> <NA> 1
# ... with 11,778 more rows注意:在这里,我们仅使用了基于OP文章中所示示例的前6列。如果我们需要更多的列,更改'keyval‘为这些列添加’coalesce‘和'score’,在连接之前对所有这些列进行计分
发布于 2017-09-29 19:32:51
如果您正在使用字典,我推荐我们的文本挖掘包,它具有广泛的字典处理功能。
它允许将固定的、"glob“或正则表达式匹配到字典值,这是非常有用的,因为许多文本字典方案使用globs作为通配符。
这是我会怎么做的。
library("quanteda")
packageVersion("quanteda")
## [1] ‘0.99.9’
geninquirer <- df
# construct a quanteda dictionary
# also cleans up the #1 etc tags
GIpos <-
c(geninquirer$Entry[geninquirer$Positiv == "Positiv"],
geninquirer$Entry[geninquirer$Yes == "Yes"]) %>%
stringi::stri_replace_all_regex("#\\w+$", "") %>%
unique
GIneg <-
c(geninquirer$Entry[geninquirer$Negativ == "Negativ"],
geninquirer$Entry[geninquirer$No == "No"]) %>%
stringi::stri_replace_all_regex("#\\w+$", "") %>%
unique
GI_dict <- dictionary(list(positive = GIpos, negative = GIneg))
txt <- "I will abandon other text analysis packages for dictionary
analyis because the excellent quanteda makes it so easy."虽然只需一步即可完成此操作,但在这里,我首先创建了dfm,并在第二步中对其应用了字典。
dfm(txt) %>% dfm_lookup(dictionary = GI_dict, nomatch = "other")
## Document-feature matrix of: 1 document, 3 features (0% sparse).
## 1 x 3 sparse Matrix of class "dfmSparse"
## features
## docs positive negative other
## text1 2 1 16请注意,您甚至不需要将字典值小写,因为匹配的默认值是不区分大小写的。
https://stackoverflow.com/questions/46356813
复制相似问题