首页 文章

根据另一个数据框中的列值选择一个数据框中的行?

提问于
浏览
1

我有两个数据帧

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 .

对于 example ,我的列表中的新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),]

它给了我<0行>(或0长度row.names)的colnames(df1)

有谁知道我哪里出错了?我不知道我是否可以以某种方式使用合并,因为我需要检查正确的colname和值> 0 .

1 回答

  • 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)
    

相关问题