【问题标题】:Count freq of word and which column it appears in using R使用 R 计算单词的频率及其出现在哪一列
【发布时间】:2020-10-15 01:02:13
【问题描述】:

我有一个包含不同列中一系列名称的数据集。每列确定姓名输入系统的时间。是否可以找到所有名称出现的次数和最近的列条目。我添加了一张图片来展示数据集的工作原理。

【问题讨论】:

  • 请不要发布代码/数据/错误的图像:它不能被复制或搜索 (SEO),它会破坏屏幕阅读器,并且它可能不适合某些移动设备。参考:meta.stackoverflow.com/a/285557(和xkcd.com/2116)。请直接包含代码、控制台输出或数据(例如,dput(head(x))data.frame(...))。
  • 在这种情况下,“最近的”是什么意思?第一列 “1 秒前” 因此是最近的,还是第一个时间单位因此是最近的?
  • 你说“每一列决定了名字输入系统的时间。”,这会给整理数据增加问题。我知道这是一个示例问题,但从根本上讲,这些列可能会更好,以便更好、更轻松地进行分析

标签: r data-wrangling


【解决方案1】:

这是一种方法:

library(dplyr)
set.seed(42)
dat <- setNames(as.data.frame(replicate(4, sample(letters, size = 10, replace = TRUE))), 1:4)
dat
#    1 2 3 4
# 1  q x c c
# 2  e g i z
# 3  a d y a
# 4  y y d j
# 5  j e e x
# 6  d n m k
# 7  r t e o
# 8  z z t v
# 9  q r b z
# 10 o o h h

tidyverse

library(dplyr)
library(tidyr)
pivot_longer(dat, everything(), names_to = "colname", values_to = "word") %>%
  mutate(colname = as.integer(colname)) %>%
  group_by(word) %>%
  summarize(n = n(), latest = max(colname), .groups = "drop")
# # A tibble: 20 x 3
#    word      n latest
#    <chr> <int>  <int>
#  1 a         2      4
#  2 b         1      3
#  3 c         2      4
#  4 d         3      3
#  5 e         4      3
#  6 g         1      2
#  7 h         2      4
#  8 i         1      3
#  9 j         2      4
# 10 k         1      4
# 11 m         1      3
# 12 n         1      2
# 13 o         3      4
# 14 q         2      1
# 15 r         2      2
# 16 t         2      3
# 17 v         1      4
# 18 x         2      4
# 19 y         3      3
# 20 z         4      4

数据表

library(data.table)
melt(as.data.table(dat), integer(0), variable.name = "colname", value.name = "word")[
  , colname := as.integer(colname)
    ][, .(n = .N, latest = max(colname)), by = .(word) ]

(虽然没有按word排序,但值是一样的)

【讨论】:

  • 那个 data.table 的例子看起来很复杂。你经常使用 data.table 吗?
  • 每天。它的“复杂性”可能是由于data.table 固有的紧凑命名法,尽管每个组件都与dplyr 版本完全相同。
  • 这能回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多