【发布时间】:2018-06-01 03:56:41
【问题描述】:
我有两个 df。它们的行数不同,但有一个共同的列lepsp。
set.seed(571)
year = as.factor(c(rep("1998", 20), rep("1999", 16)))
lepsp = c(letters[1:20], c('a','b','c'),letters[8:20])
freq = rpois(36, lambda=12)
df1 <- data.frame(year, lepsp, freq)
lepsp = c(letters[1:26],c('a','b','c'),letters[1:20],c('e','f',"h"))
plntsp = c(paste("plnt", sep= "_", letters[1:26]),
paste("plnt",sep="_",letters[1:20]),
paste("plnt",sep="_",letters[18:23]))
df2 <- data.frame(lepsp, plntsp)
我想在两个数据框中匹配lepsp,并向df1 添加一列,指定与每个lepsp 关联的每个plntsp。每个唯一的plntsp 都需要合并为一个新列。如果没有关联的工厂,则这些条目可以留空。新的 df 应该如下所示:
df <- data.frame(lepsp=unique(c(letters[1:5],letters[14:18])),
plntsp1=c("","","plnt_a","plnt_b","plnt_c","","","","",""),
plntsp2=c("","","", "plnt_c","plnt_d","","","","",""))
我过去使用它进行匹配,但不知道如何调整它以便将plntsp 的每个级别添加为新列。
df1$plntsp<-df2$plntsp[match(df1$lepsp, df2$lepsp)]
【问题讨论】:
-
letters[seq(from = 1, to = 20 )]可以简单地写成letters[1:20]。而letters[1:26]就是letters -
merge(df1, df2, on='plntsp', ...),但我不清楚您给出的合并结果 df 与 df1 和 df2 的关系。