我有一个类似于以下内容的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个变量(种类)。
答案 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))