我有一个数据集,看起来大致如下所示。
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)
据我了解,此解决方案不适用于大型数据集 实现这一解决方案的最佳方式是什么?
提前感谢您的想法!
答案 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 ]
因为这意味着您的结果太长而无法在屏幕上打印,但这并不意味着它没有计算出来。