如何计算与另一列中的特定值相关的一列中的值的数量

时间:2016-02-24 14:59:29

标签: r

我有一个数据集,看起来大致如下所示。

 const char *srcData = "Hi ! This is a really really really long test string !";
  const int dstBufferSize = LZ4_compressBound(strlen(srcData) + 1);
  char *dstData = new char[dstBufferSize];
  int bytesPassed = LZ4_compress_default(srcData, dstData,  
                                       sizeof(srcData), 
                                       dstBufferSize);
  BOOST_LOG_TRIVIAL(info) << dstData << std::endl;

  std::ofstream fWriter("test.bin", std::ofstream::binary);
  fWriter << dstData;
  fWriter.close();

  char* decStr = new char[strlen(srcData) + 1];

  LZ4_decompress_fast(dstData, decStr, strlen(srcData) + 1);

  std::cout << decStr << std::endl; // only Hi appearing

  delete[] dstData;

除column3之外,所有列都有数值。
我试图弄清楚如何使用 column1 column2 column3 column4 1 2 3 string 4 2 3 56 string 6 3 86 23 string 4 中的特定值来计算column3中的值被提及的次数的方式。换句话说,在此示例中,column4的{​​{1}}值为2

目前,我已经提出了以下代码:

string

但是它给了我所有值的总数,例如4

我尝试过这个解决方案:Counting the number of elements with the values of x in a vector,但它并没有给我太多帮助,因为它给了我一个错误:

data$new_column = ifelse(data$column3=="string" && data$column4==4, "", "")
table(data$new_column)

据我了解,此解决方案不适用于大型数据集 实现这一解决方案的最佳方式是什么?

提前感谢您的想法!

2 个答案:

答案 0 :(得分:0)

请改为尝试:

 data$new_column = ifelse(data$column3=="string" & data$column4==4, T, F)

 > table(data$new_column)
    FALSE  TRUE 
        1     2 

在这里,您可以计算该陈述的真实频率。请注意,在以前的版本中,在两种情况下都有空字符串,当它为true和false时。因此,您希望输出与数据帧的长度相同。

话虽如此,快速而肮脏的黑客可能是:

 data$new_id <- paste0(data$column3, data$column4)
 table(data$new_id)

如果您不仅对这两个特定值感兴趣,这将为您提供所有组合的计数。

更高级的解决方案可能如下:

 library(dplyr)
 data %>% group_by(column4) %>% summarise(out = sum(column3=="string") )

为第4列中的所有不同值提供了第3列为“字符串”的频率。

答案 1 :(得分:0)

df1<- data.frame(column3=c("string","string","string"),column4=c(4,6,4))
df2 <- as.data.frame(table(df1))
df2

给出结果:

  column3 column4 Freq
1  string       4    2
2  string       6    1

不要打扰

[ reached getOption("max.print") -- omitted x rows ]

因为这意味着您的结果太长而无法在屏幕上打印,但这并不意味着它没有计算出来。