我有一个10k行和500列的数据框。对于每一列,我想为行中的每个唯一值创建一个计数。 E.g。
Fruit Vegetable Meat
1 Apple Carrot Steak
2 Apple Potato Chicken
3 Pear Peas Duck
会产生:
Fruit;Apple;2;Pear;1
Vegetable;Carrot;1;Potato;1;Peas;1
Meat;Steak;1;Chicken;1;Duck;1
Hmisc describe函数会产生这种分析,但输出格式太差,无法使用。
感谢。
答案 0 :(得分:0)
您可以通过table
apply
功能
例如
fruit <- c("Apple", "Apple", "Pear")
veg <- c("Carrot", "Potato", "Peas")
meat <- c("Steak", "Chicken", "Duck")
df <- data.frame(fruit, veg, meat)
apply(df, 2, table)
$fruit
Apple Pear
2 1
$veg
Carrot Peas Potato
1 1 1
$meat
Chicken Duck Steak
1 1 1
答案 1 :(得分:0)
lapply(names(df),function(x){ tb <- table(df[[x]]);
write.table(file="test.csv", append=TRUE, quote=FALSE,
row.names=FALSE, col.names=FALSE, sep=";",
x= paste(x, paste( names(tb), tb, collapse=";", sep=";") ,
sep=";")
)})
#--------
fruit;Apple;2;Pear;1
veg;Carrot;1;Peas;1;Potato;1
meat;Chicken;1;Duck;1;Steak;1
您还将看到一个不会发送到文本文件的三个NULL列表。将表和矩阵写入文件不是R的强项。在package :: MASS中有一个write.matrix
函数。我对writeLines
的初步尝试失败了,因为它没有“附加”选项,而且我无法拼凑出可以执行append
的连接调用。
(R中的另一个问题是使用'apply / lapply / sapply'处理列表(并通过继承数据帧)不会传递list-element的names
(和{{1}对于函数,所以“write”函数在内部没有用于写入文件的名称。这就是为什么我使用colnames
而不仅仅是names(df)
。
进一步说明,可能存在JSON编写功能,它们可能更可靠。我会看看并报告回来。
有RJSONIO包:
df