目前,让我说我的df看起来像这样:
Number Value
a1 cat
a1 dog
a2 dog
a3 fish
a3 cat
但我想要的是df看起来像这样:
Number Cat Fish Dog
a1 1 0 0
a2 0 0 1
a3 1 1 0
我如何在R中这样做呢?任何帮助将非常感谢!!
答案 0 :(得分:2)
试试这个。没有包使用。
tab <- xtabs(~., df)
给出:
> tab
Value
Number cat dog fish
1 1 1 0
2 0 1 0
3 1 0 1
将列大写:
colnames(tab) <- sub("(.)", "\\U\\1", colnames(tab), perl = TRUE)
或者,名称可以大写如下:
example(chartr) # this will define .simpleCap and capwords functions
colnames(tab) <- capwords(colnames(tab))
注意:我们使用了这个输入:
Lines <- "Number Value
1 cat
1 dog
2 dog
3 fish
3 cat "
df <- read.table(text = Lines, header = TRUE, as.is = TRUE)
答案 1 :(得分:0)
您可以计算对的数量,然后传播df(使用dplyr和tidyr包):
df <- df %>% group_by(Number, Value) %>% summarize(count = n())
spread(df, Value, count, fill = 0)