R-根据两个条件从另一个数据帧添加数据
我试图根据两个匹配条件将数据从另一个数据帧添加到另一个数据帧 第一个数据帧如下所示:R-根据两个条件从另一个数据帧添加数据,r,replace,R,Replace,我试图根据两个匹配条件将数据从另一个数据帧添加到另一个数据帧 第一个数据帧如下所示: df.1<-cbind.data.frame(c("Site A","Site A","Site A","Site A","Site B","Site B","Site B","Site C","Site C"),c("Species 1","Species 2","Species 3","Species 5","Species 2","Species 3","Species 4","Species 1"
df.1<-cbind.data.frame(c("Site A","Site A","Site A","Site A","Site B","Site B","Site B","Site C","Site C"),c("Species 1","Species 2","Species 3","Species 5","Species 2","Species 3","Species 4","Species 1","Species 5"),c(10,15,5,10,30,10,20,10,5))
names(df.1)<-c("Location","Species","Count")
我的第二个数据帧是:
df.2<-as.data.frame(matrix(0,nrow=3,ncol=5))
names(df.2)<-c("Species 1","Species 2","Species 3","Species 4","Species 5")
row.names(df.2)<-c("Site A","Site B","Site C")
我想根据位置和种类将第一个数据帧的计数添加到第二个数据帧。应该是这样的:
Species 1 Species 2 Species 3 Species 4 Species 5
Site A 10 15 5 0 10
Site B 0 30 10 20 0
Site C 10 0 0 0 15
但我似乎做不到。问题似乎在于两个数据帧的大小不同
也就是说,我试过:
df.2<-ifelse(row.names(df.2)==df.1$Location && names(df.2)==df.1$Species,df.1$Count,0)
df.2您不需要第二个数据帧,只需将Species
列扩展为宽格式,例如使用tidyr
:
library(tidyr)
df.1 %>%
spread(Species, Count) %>%
mutate_all(funs(replace(., is.na(.), 0)))
Location Species 1 Species 2 Species 3 Species 4 Species 5
1 Site A 10 15 5 0 10
2 Site B 0 30 10 20 0
3 Site C 10 0 0 0 5
mutate\u all
函数将spread
引入的所有NA
替换为零。您不需要第二个数据帧,只需将物种
列扩展为宽格式,例如使用tidyr
:
library(tidyr)
df.1 %>%
spread(Species, Count) %>%
mutate_all(funs(replace(., is.na(.), 0)))
Location Species 1 Species 2 Species 3 Species 4 Species 5
1 Site A 10 15 5 0 10
2 Site B 0 30 10 20 0
3 Site C 10 0 0 0 5
mutate\u all
函数将spread
引入的所有NA
替换为零。或w/base R
tapply(df.1$Count,list(df.1$Location,df.1$Species),"[")
Species 1 Species 2 Species 3 Species 4 Species 5
Site A 10 15 5 NA 10
Site B NA 30 10 20 NA
Site C 10 NA NA NA 5
如果你不想要NAs
df[is.na(df)] <- 0
df[is.na(df)]或w/base R
tapply(df.1$Count,list(df.1$Location,df.1$Species),"[")
Species 1 Species 2 Species 3 Species 4 Species 5
Site A 10 15 5 NA 10
Site B NA 30 10 20 NA
Site C 10 NA NA NA 5
如果你不想要NAs
df[is.na(df)] <- 0
df[is.na(df)]我们可以使用xtabs
frombase R
xtabs(Count ~ Location +Species, df.1)
# Species
#Location Species 1 Species 2 Species 3 Species 4 Species 5
# Site A 10 15 5 0 10
# Site B 0 30 10 20 0
# Site C 10 0 0 0 5
我们可以使用xtabs
frombase R
xtabs(Count ~ Location +Species, df.1)
# Species
#Location Species 1 Species 2 Species 3 Species 4 Species 5
# Site A 10 15 5 0 10
# Site B 0 30 10 20 0
# Site C 10 0 0 0 5