首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据R中字符串中的字母分配数值

根据R中字符串中的字母分配数值
EN

Stack Overflow用户
提问于 2016-03-19 11:23:52
回答 2查看 553关注 0票数 4

我有一个data.frame,它是一个单列,有235,886行。每一行对应于英语中的一个单词。

例如。

代码语言:javascript
复制
> words[10000:10005,1]

1抗传染病抗传染病抗传统抗传统抗惊厥

6 anticor

我想做的是根据每行中的字母将每行转换为一个数字。所以,如果"a“= 1,"b”= 2,"c“= 3,"d”= 4,那么"abcd“= 10。

我的最终目标是有一个函数,它扫描data.frame中给定的数值,并返回具有该值的所有字符串,即单词。因此,从上面的示例继续,如果我请求值9,此函数将返回"dad“和任何其他数值为9的行。

EN

回答 2

Stack Overflow用户

发布于 2016-03-19 11:31:33

您可以组合使用strsplitmatch。我在其中添加了一个tolower,以确保我们匹配的是正确的内容。

下面是一个实现这些步骤的函数:

代码语言:javascript
复制
word_value <- function(words) {
  temp <- strsplit(tolower(words), "", TRUE)
  vapply(temp, function(x) sum(match(x, letters)), integer(1L))
}

下面是一个示例向量:

代码语言:javascript
复制
myvec <- c("and", "dad", "cat", "fox", "mom", "add", "dan")

测试一下:

代码语言:javascript
复制
word_value(myvec)
# [1] 19  9 24 45 41  9 19

myvec[word_value(myvec) == 9]
# [1] "dad" "add"

myvec[word_value(myvec) > 20]
# [1] "cat" "fox" "mom"
票数 4
EN

Stack Overflow用户

发布于 2016-03-19 11:40:14

您可以使用utf8ToInt

代码语言:javascript
复制
#using the sample data from Ananda's answer
offset <- utf8ToInt("a") - 1
d <- vapply(tolower(myvec), 
  function(ii) sum(utf8ToInt(ii) - offset), FUN.VALUE = double(1L))
#and dad cat fox mom add dan 
# 19   9  24  45  41   9  19

d[d > 20]
#cat fox mom 
# 24  45  41

使用偏移量是必要的,因为utf8ToInt("a")是97,但是您希望"a“是1。

如果愿意,使用stack包装将为输出提供不同的格式:

代码语言:javascript
复制
d <- stack(vapply(tolower(myvec), 
  function(ii) sum(utf8ToInt(ii) - offset), FUN.VALUE = double(1L)))
#  values ind
#1     19 and
#2      9 dad
#3     24 cat
#4     45 fox
#5     41 mom
#6      9 add
#7     19 dan

d[d$values > 20,]
#  values ind
#3     24 cat
#4     45 fox
#5     41 mom
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36097446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档