【问题标题】:Creating a new data frame based in minimum frequency [duplicate]基于最小频率创建一个新的数据框[重复]
【发布时间】:2019-09-16 20:23:15
【问题描述】:

我正在尝试从现有数据框 TopWords 创建一个新数据框。原始数据框data_to_export 字数过多(bios),我想只保留经常使用的字词(bios),但我还需要保留与每个字词关联的 ID 号。

这是我想出的,但它不起作用。它不喜欢if 条件语句,但我不知道该怎么做。

TopWords<- data_to_export if freq_terms(data_to_export$bios2 > 4)

我希望得到来自data_to_export 的相同数据,但只针对单词出现五次或更多次的案例的数据。

例如,

data_to_export (original data)
ID  bios2
1    i
1    love
1    playing
1    soccer
2    i
2    am
2    a
2    teacher
2    mom
2    grandma
2    sister
3    i
3    think
3    soccer
3    is
3    the 
3    best
4    soccer
4    player
5    i
5    like
5    soccer
5    i
5    could
5    play
5    soccer
5    all
5    day


New data frame:
1   i
1   soccer
2   i
3   i
3   soccer
4   soccer
5   i
5   soccer
5   i
5   soccer


任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。
  • 我现在尝试在上面添加一个示例。谢谢!
  • freq_terms 来自哪里?那行代码不是标准的 R 语法——我不知道你可以只输入数据框的名称,然后直接进入这样的 if 语句
  • 使用dplyr,可以做到data_to_export %>% group_by(bios2) %>% filter(n() > 4)
  • camile,它来自qdap

标签: r dataframe nlp data-cleaning


【解决方案1】:

编辑:奇怪的是,这实际上是行不通的。字符串比较没有发现i 的两个实例,但我无法解释这是为什么。

用最后一行代替:

TopWords <- data_to_export[grep(paste0('\\b', names(freq)[freq], '\\b', collapse = '\\b|\\b'), data_to_export$bios2), ]

这是一个使用base R的方法:

data_to_export <- data.frame(
  ID = c(rep(1, 4), rep(2, 7), rep(3, 6), rep(4, 2), rep(5, 9)),
  bios2 = c(
    'i', 'love', 'playing', 'soccer', 'i', 'am', 'a', 'teacher', 'mom',
    'grandma', 'sister', 'i', 'think', 'soccer', 'is', 'the', 'best', 'soccer',
    'player', 'i', 'like', 'soccer', 'i', 'could', 'play', 'soccer', 'all',
    'day'
  )
)
freq <- table(data_to_export$bios2) >= 5
TopWords <- subset(data_to_export, bios2 == names(freq)[freq])

table 计算字符串值的频率,subset 过滤 data.frame 以查找出现 5 次或更多次的所需字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 2017-04-06
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多