r - 用 R 中的 data.table 计算字数
问题描述
我是 data.table 的新手,我有一个包含人名和国家/地区的数据集,我想按国家/地区了解最常见的名称。
数据集如下所示:
DT <- data.table(person_id = c(1,2,3,4,5,6),
person_name = c('John Smith', 'Marty Mcfly', 'Amélie Poulain', 'John Wick', 'Clark Kent', 'Marcel Poulain'),
person_ctry = c('US', 'US', 'FR', 'US', 'US', 'FR')
)
我想获得这样的data.table:
person_ctry word count
US John 2
US Smith 1
US Marty 1
FR Poulain 2
FR Amélie 1
....
我试过这个:
all_names <- DT[, lapply(.(person_name), paste0, collapse=" "), by=person_ctry]
wordcount <- function(str) {
as.data.frame(table(unlist( strsplit(str, "\ ") )))
}
all_names[, c("word","count") := wordcount(V1), by=person_ctry]
但是最后一行给出了一个错误,说 RHS 与 LHS 长度不完全匹配。但是,我不知道如何纠正它。有任何想法吗 ?
谢谢。
解决方案
这是一个稍微修改的方法来计算这些单词:
DT[, .(word = unlist(strsplit(person_name, '\\s+'), use.names = FALSE)),
by = .(person_ctry)][, .(count = .N), by = .(person_ctry, word)]
# person_ctry word count
# 1: US John 2
# 2: US Smith 1
# 3: US Marty 1
# 4: US Mcfly 1
# 5: US Wick 1
# 6: US Clark 1
# 7: US Kent 1
# 8: FR Amélie 1
# 9: FR Poulain 2
# 10: FR Marcel 1
该方法有两个步骤:
- 在空格处拆分单词(名称),按国家/地区执行此操作以创建中间 data.table
.N
使用 data.tables 特殊功能计算每个国家/地区每个唯一单词的行数
我使用一个链结合了这两个步骤[]
推荐阅读
- mysql - 如何在 sequelize 中编写嵌套的 select 语句?
- android - 如何最好地处理 Android 应用程序中的数据模型?
- postgresql - Spring Boot JPA @UpdateTimestamp 不适用于 Postgresql
- javascript - React.createElement 预期字符串问题
- firebase - 如何使用 FireBase 身份验证进行 SSO
- ruby-on-rails - 在 rails 中使用 selected_tag 中的选定项目 id
- assembly - 8086 中断 21h , 02h 不打印任何内容
- python - Docker 不提供 Django 静态文件
- java - 限制 url 重定向而不登录到 Java JSP 中的网站?
- google-sheets - 计算列中的出现次数