【问题标题】:How do I select values from a list based on character length?如何根据字符长度从列表中选择值?
【发布时间】:2015-06-19 19:06:43
【问题描述】:

我正在开发一个遵循这个基本逻辑的程序:

  1. 读取 3 个 CSV 文件,其中前两个包含关键字,最后一个包含排除词。
  2. 将两个关键字列表合二为一,将所有关键字大写并删除所有少于 3 个字符的关键字
  3. 对关键字列表中的重复关键字进行排序并删除。
  4. 将排除列表中的所有单词大写。
  5. 删除排除列表中匹配的关键字。

这是我遇到问题的第 2 步。我已经尝试了很多解决方案,但没有任何效果。这是我的代码:

# Read in individual data sets

set1=read.csv("set1.csv",header=FALSE,sep=",")
set2=read.csv("set2.csv",header=FALSE,sep=",")
exclude_list=read.csv("exclude.csv",header=FALSE,sep=",")

# Create a new set with the aggregate of all keyword sets,
# capitalizing all keywords and excluding keywords that are 
# less than 2 characters in length

set_agg=rbind(set1,set2)
keywords=set_agg[c("V1")]
keywords = as.data.frame(sapply(keywords, toupper))

??? WHAT GOES HERE ???

# Sort and remove duplicate keywords from the keyword list
as.data.frame(keywords[order(keywords$V1),])
keywords=unique(keywords)

# Modify and capitalize the exclusion list

exclude_list=as.data.frame(exclude_list[c("V1")])
exclude_list=as.data.frame(sapply(exclude_list, toupper))   

# Remove keywords matching the exclude list

`%ni%` <- Negate(`%in%`)

keywords=subset(keywords, V1 %ni% exclude_list$V1)

return(keywords)

作为参考,CSV 文件的格式如下:

word1,
word2,
word3,
etc...

【问题讨论】:

  • 查看touppernchar 函数。另外:c(1,2,3)[ ! c(1,2,3) %in% c(1,2) ] 是一种表达方式:给我 {1,2,3} 中不在 {1,2} 中的元素
  • @arvi1000 或setdiff(c(1,2,3),c(1,2))
  • 对,或者那个!显示上述内容,因为 OP 已经在使用 %in%

标签: r csv


【解决方案1】:

您可以通过对关键字的长度使用 sapply 进行索引来做到这一点:

keywords[sapply(keywords[,1], nchar) > 2,]

更新这是一个使用向量更简单的完整版本:

## Assuming you have keywords and exclude_list originally stored as vectors
keywords <- sapply(unique(sort(c(set1, set2))), toupper)
keywords <- keywords[nchar(keywords) > 2]
keywords <- setdiff(keywords, sapply(exclude_list, toupper))

【讨论】:

  • 不,你想要的是 nchar,而不是长度! length('hi') 是 1。nchar('hi') 是 2
  • 感谢@Frank 和 arvi1000。还有在这里使用 data.frames 的原因吗?似乎向量会更容易一些。
  • 不错的编辑。无需使用“更新”等突出显示。感兴趣的人可以看到编辑历史记录,最好将答案保持在最佳状态。如果 unique 也应用于排除列表,最后一个操作可能成本更低;而setdiff(x,y)x[ ! x %in% y ] 的替代品
  • 我对这门语言真的很陌生,如果没有一切都是数据框,我什么都不能工作。此外,当我运行您的代码(原始版本,而不是 UPDATE 版本)时,我收到一条错误消息,上面写着“FUN(X[[i]], ...) 中的错误:'nchar()' 需要字符向量”。想法?
  • 另外,当我尝试您的更新代码时,我收到错误“sort.int(x, na.last = na.last, 减少 = 减少, ...) 中的错误:'x' 必须是原子的“
猜你喜欢
  • 2023-03-16
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多