【问题标题】:Conditional formatting table with R带有R的条件格式表
【发布时间】:2014-11-16 02:59:04
【问题描述】:

我有一张桌子:

Time Class  Type Value1 Value2
2005  A      KS    5      6
2005  B      KS    3      3
2005  C      CS    6      6
2006  A      CS    5      3
2006  A      KS    9      2
2006  B      KS    6      9
2006  C      KS   39      6
2007  C      CS   10      20
2007  A      KS   26      23

我需要创建新的数据集,其中仅包含每年具有相同“类”和“类型”的行。例如,对于 2005 年和 2006 年,只有两行具有相同(常见的)“类”和“类型”。

【问题讨论】:

  • 条件不清楚,尤其是common 类和类型。例如,C CS 在 2007 年和 2005 年很常见。但在输出中,您删除了 2007
  • @akrun 对于每一年,我们应该只选择具有相同类型和类的行。我编辑了问题。现在输出为空。我添加了 2007 行以表明您的第一种方法在三年内都行不通。如果我的解释不清楚,请提出更多问题。
  • 但是,你为什么要删除C CS。这两年很常见。同样,A KSB KS 在 2007 年也找不到。所以,common 的定义并不明确。
  • @akrun C CS 必须在 2005、2006 和 2007 年通用
  • 我就是这么说的。根据您的逻辑,A KSB KS 仅适用于 2005 年和 2006 年。

标签: r duplicates aggregate apply


【解决方案1】:

试试

indx1 <- Reduce(`intersect`,lapply(split(df, df$Time),
      function(x) as.character(interaction(x[,c('Class', 'Type')]))))

df[as.character(interaction(df[,c('Class', 'Type')])) %in% indx1,]
#  Time Class Type Value1 Value2
#1 2005     A   KS      5      6
#5 2006     A   KS      9      2
#9 2007     A   KS     26     23

数据

  df <- structure(list(Time = c(2005L, 2005L, 2005L, 2006L, 2006L, 2006L, 
  2006L, 2007L, 2007L), Class = c("A", "B", "C", "A", "A", "B", 
  "C", "C", "A"), Type = c("KS", "KS", "CS", "CS", "KS", "KS", 
  "KS", "CS", "KS"), Value1 = c(5L, 3L, 6L, 5L, 9L, 6L, 39L, 10L, 
  26L), Value2 = c(6L, 3L, 6L, 3L, 2L, 9L, 6L, 20L, 23L)), .Names = c("Time", 
  "Class", "Type", "Value1", "Value2"), class = "data.frame", row.names =
  c(NA, -9L))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 2020-09-09
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 2019-06-05
    相关资源
    最近更新 更多