【发布时间】:2018-03-20 14:21:20
【问题描述】:
我遇到了一些不应该那么难解决的问题。我想做的是通过使用另一个data.frame 来对data.frame 进行子集化,更准确地说,通过使用某个参数。
示例如下:
df1<- t(data.frame(A=c("ABI", "BET", "ALN", "SPH", "PTI", "DIC", "PTD"), B=c("0.5","3","0","0","5","0","15"), C=c("0","0","3","15","15","0","0"), D=c("0.5","0.5","0.5","0","0","0","0"), E=c("37.5","37.5","0.5","62.5","0.5","0.5","1")))
df2<- data.frame(A=c("ABI", "BET", "ALN", "SPH", "PTI", "DIC", "PTD"), B=c("vasc", "vasc","vasc","spha", "moss","moss","moss"), C=c("a", "a", "b", "a", "c","d","a"))
现在,假设我希望在我的df1 中只有我的 df1 中的 df2 中的“vasc”对象 A(这里它们是物种)。
为此,我尝试了一些方法,例如:
df3 <- subset(df2, B=="vasc")
df4 <- df1[,c(df1, as.vector(df2))]
但是这样做,我有一个类型错误:
df1[, c(df1, as.vector(df2))] 中的错误:下标类型“列表”无效
因此,我尝试取消列出我的数据框,但似乎没有任何效果。我在这个问题上已经有一段时间了,我确实探索了论坛,看看是否有人对我的问题有一个优雅的解决方案,但看起来没有。 执行此子集的另一种方法是执行以下代码,但即使我觉得更接近解决方案,它也不起作用:
try11 <- list(df2, df1)%>% rbindlist(., fill=T) # with df1 not transposed
df11 <- try11[try11=="vasc",]
我希望代码足够好,我的解释足够清楚。 谢谢!
【问题讨论】: