【问题标题】:R: Lookup and count [table merging and summing]R:查找和计数[表合并和求和]
【发布时间】:2013-06-12 10:35:15
【问题描述】:

我有一个名为nameIwant 的列表,其值类似于a, b, c

还有一个看起来像这样的数据框:

   value.1      name.1      name.2     name.3     value.2
  positive      a          b          NA           negative
  negative      x          b          d            neutral
  positive      a          y          NA           positive
  neutral       c          NA         NA           negative

而我想做的是找到每个 name.1、name.2 和 name.3 元素与 nameIwant 元素匹配的正数、中性数和负数的百分比。

因此,例如,我会发现 a 有 2+1(2 来自 value.1 和 1 来自 value.2)正值和 1 个负值,b 有 1 个正值和 1+1 个负值,并且一个中性,c 有 1 个中性和 1 个负我不会处理 x y 和 d。

我尝试将 name.1&value.1name.2&value.1name.3&value.1 列转换为名称与 nameIwant 匹配的表,但我无法加入 3 个不同的表,最终得到了三个表,即第一个有 11 个 nameIwants 和所有三种情绪的计数,第二个有 5 个 nameIwants 不包括在第一个表中,还有一些是,只有消极和积极情绪的情绪得分,我想做的是加入这些表,以便所有名称都存在,对于不止一个表中的名称,我想将情绪分数相加,但我不知道该怎么做。

如果我可以用value.1 做到这一点,那么我会用value.2 做同样的事情,然后合并这两个表,最终得到一个表,告诉我有多少反对票、赞成票和中立票这些nameIwants 总共基于value.1value.2

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您创建一个体面的数据框,其中包含一个键列和一个值列,生活会变得更加轻松:

    dat <- read.table(header=TRUE, text="
    value.1      name.1      name.2     name.3     value.2
      positive      a          b          NA           negative
      negative      x          b          d            neutral
      positive      a          y          NA           positive
      neutral       c          NA         NA           negative
    ", stringsAsFactors=FALSE)
    
    x <- with(dat, data.frame(name=c(name.1, name.2, name.3), value=c(rep(value.1, 3), rep(value.2, 3)), stringsAsFactors=FALSE))
    

    结果:

    > x
       name    value
    1     a positive
    2     x negative
    3     a positive
    4     c  neutral
    5     b positive
    6     b negative
    7     y positive
    8  <NA>  neutral
    9  <NA> positive
    10    d negative
    11 <NA> positive
    12 <NA>  neutral
    13    a negative
    14    x  neutral
    15    a positive
    16    c negative
    17    b negative
    18    b  neutral
    19    y positive
    20 <NA> negative
    21 <NA> negative
    22    d  neutral
    23 <NA> positive
    24 <NA> negative
    

    现在你可以使用 R 机器了:

    > table(x)
        value
    name negative neutral positive
       a        1       0        3
       b        2       1        1
       c        1       1        0
       d        1       1        0
       x        1       1        0
       y        0       0        2
    

    如果您不喜欢表中的某些名称,只需将它们丢弃即可。要过滤表格对象,我建议使用以下技巧:

    tab <- as.data.frame(unclass(table(x)))
    

    过滤:

    > tab[row.names(tab) %in% c("a", "b", "c"), ]
      negative neutral positive
    a        1       0        3
    b        2       1        1
    c        1       1        0
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2016-03-23
      相关资源
      最近更新 更多