【问题标题】:Search for particular words in frequency table在频率表中搜索特定单词
【发布时间】:2018-12-28 10:11:55
【问题描述】:

我一直在努力在我的频率表中搜索特定单词,其中包含一堆大学和公司名称。我想将此表拆分为 1-“大学”和 2-“公司”的 2 个表(或列表)。为此,我正在考虑搜索“大学”“学校”“学院”的特定单词,并将它们全部写入名为“大学”的表(或列表)中。表的其余条目(可能是“公司”名称)将形成名为“公司”的第二个表(或列表)

我对此进行了调查,发现 grep("University", OriginalFrequencyTable) 不起作用。我想原因是因为 grep 使用字符向量而不是表(?!)

OriginalFrequencyTable: (number in front of names is frequency of occurrence)

Loyalist College 2 
Globe Inc 4
University Of Central Arkansas 3
Anderson University 2
Bridgewater State College 1
Allegheny College 1
Cs Technologies 3
Healthpartners 1

Expected result (are 2 tables named, "Universities" and "Companies"):

--------------1st table "Universities":--------------
Loyalist College 2 
University Of Central Arkansas 3
Anderson University 2
Bridgewater State College 1
Allegheny College 1

--------------2nd table "Companies":--------------
Globe Inc 4
Cs Technologies 3
Healthpartners 1

非常感谢任何帮助, 提前非常感谢,

【问题讨论】:

  • 我经常发现数据框允许在 R 中进行更好的数据操作。

标签: r


【解决方案1】:

我们可以使用split将data.frame拆分成listdata.frame

library(stringr)
lst1 <- split(df, str_detect(df$Name, "\\b(College|University)\\b"))

【讨论】:

  • 感谢您的提示。我正在处理“频率表”。您能否详细说明如何过滤此类表的条目?提前致谢。
  • @Riccardo 它是table 对象吗?请确认str(df)
  • 是的,CompanyUniversity &lt;- df$Name 然后我做 `table(CompanyUniversity)` 给出所有公司和大学名称的频率表。现在我想将此表分成 2 个。一个仅包含公司名称,另一个仅包含大学名称(每个名称显示的频率编号,如 table() 命令的输出所示)
  • @Riccardo 试试dat &lt;- as.data.frame.matrix(table(CompanyUniversity)),然后试试split
  • 我这样做了..它的意思是:“seq_len(ncols) 中的错误:参数必须强制转换为非负整数”
【解决方案2】:

一个基本的 R 选项是使用 grepl 并搜索关键字 CollegeUniversity 作为学校的标记:

Universities <- df[grepl("\\b(College|University)\\b", df$Name), ]
Companies <- df[!grepl("\\b(College|University)\\b", df$Name), ]

我不确定您的列被称为什么,我假设有一个包含公司和大学名称的 Name 列。如果频率有一个实际的单独列,那么上述解决方案应该仍然有效。如果您将名称和频率放在同一列中,它也应该可以工作。

【讨论】:

  • 比格莱兹。非常感谢您回复我的询问。如果我不够清楚,我很抱歉。我有一个“频率表”(请参阅​​我的帖子标题)并期待 2 个表。我认为您的解决方案适用于包含大学和公司名称的列。更准确地说,我有table(df$Name),这是您在我最初的帖子/问题描述中看到的表格。我期望的是 2 个按关键字过滤的表(作为学校的标记),所以我感兴趣的只是大学和公司的名称,并且名称前面有一个频率,即table(df$Name)
  • 我的答案已经在这样做了,至少在我测试代码时是这样。您只需对原始数据框进行子集化即可生成两个新数据框。
  • 嗨蒂姆,非常感谢您的及时回复。这是我的问题。一旦我使用您的代码行Companies &lt;- df[!grepl("\\b(College|University)\\b", df$Name), ](实际上是原始数据框的一个子集)并执行table(Companies$Name),我会得到一个公司名称的频率表,但是,仍然存在大学名称,频率为“0” .我只是拿你的代码并在你 2 个新数据帧上发出 table() 命令。你知道为什么会这样吗?提前感谢您的cmets。
  • 等等...您是说要将名称和频率作为单独的列吗?是这个问题吗?
  • 我想从原始频率表中得到两个单独的表。一个用于“公司”,另一个用于“大学”。当我执行代码行时(生成两个子集,称为大学和公司),然后在每个子集上运行 table() 命令,我得到的是频率表(对于每个子集),对于大学子集,我看到大学名称的频率(出现次数,例如 2 3 1 ...),公司名称为“0”。
猜你喜欢
  • 2015-05-22
  • 2016-05-20
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2019-12-29
  • 1970-01-01
  • 2018-06-27
相关资源
最近更新 更多