R - 创建存在/不存在df

时间:2014-11-05 17:44:09

标签: r dataframe

我有一个类似于以下内容的data.frame:

Species<-c("a","b","c","d")
Samples<-c(1,2,3,4,5,6)

species<-sample(Species,20,replace=TRUE)

samples=sample(Samples,20,replace=TRUE)

df <- data.frame(samples,species)

我希望在data.frame中对其进行转换,其中每个物种将显示为一列,每个样本将占据一条线。值(0和1)表示存在和不存在。我原来的data.frame约有。 600k行,60k样本和20个变量(种类)。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

> reshape2::dcast(df,formula = samples ~ species)

      samples a b c d
    1       1 0 0 1 3
    2       2 0 3 1 0
    3       3 2 1 0 1
    4       4 0 1 0 1
    5       5 1 1 2 1
    6       6 0 0 0 1

答案 1 :(得分:0)

正如Ananda在评论中已经提到的那样,您可以使用table,例如:

as.data.frame(with(df, table(samples, species)) > 0L) +0L
#  a b c d
#1 1 0 1 1
#2 1 1 0 1
#3 1 0 1 0
#4 1 1 1 1
#5 1 0 0 1
#6 0 1 1 0

我在这里使用的数据是:

Species <- c("a","b","c","d")
Samples <- 1:6
set.seed(99)
df <- data.frame(samples = sample(Samples, 20, replace=TRUE), 
                 species = sample(Species, 20, replace=TRUE))