我有两个数据帧
DF1
i1 i2 i3
p1 1 1 1
p2 0 1 1
p3 0 0 1
DF2
p1 p2 p3
site1 0 0 1
site2 4 1 10
site3 15 0 0
现在我想在df2中为每个站点创建一个数据帧列表。数据帧应该只包含来自df1的行,这些行在df2中并且> 0。
对于示例,我列表中的新df应为:
site1: i1 i2 i3
p3 0 0 1
site2: i1 i2 i3
p1 1 1 1
p2 0 1 1
p3 0 0 1
site3: i1 i2 i3
p1 1 1 1
除了列表问题,我无法让R在df1中选择正确的行。到目前为止我所做的是使用%in%
test<-df1[df1[,1] %in% (df2[1,-1]>0),]
给了我带有&lt; 0行&gt;的colnames(df1)。 (或0长度的row.names)
有谁知道我哪里出错了?我不喜欢&#39;知道我是否可以以某种方式使用合并,因为我需要检查正确的colname和值> 0。
答案 0 :(得分:1)
我认为你应该which
而不是%in%
。让我们定义一个函数,使用它来为任何特定行执行此操作:
foo = function(x, df1, df2) {
df1[which(df2[x, ] > 0), ]
}
现在我们使用apply
在df2中的所有行上执行上述功能。
apply(matrix(1:nrow(df2)), 1, foo, df1 = df1, df2 = df2)