按变量名称过滤数据框列

贾斯汀尼安482

我有以下数据框:

df <- data.frame(
  gene = c("A","B","C","D","E","F","G","H","I","J"),
  pos.rank = c(1,2,3,4,5,6,7,8,9,10),
  neg.rank = c(10,9,8,7,6,5,4,3,2,1),
  stringsAsFactors=TRUE
)

我想基于值过滤数据帧1:3pos.rankneg.rank一列,例如:

library(dplyr)
x <- "neg.rank"
y <- "pos.rank"

df.x <- df[df[x] %in% 1:3, ]
df.y <- df[df[y] %in% 1:3, ]

但两者df.xdf.y是空的。当我运行时,df[x]我得到这个输出:

   neg.rank
1        10
2         9
3         8
4         7
5         6
6         5
7         4
8         3
9         2
10        1

我做错了什么?

罗纳克·沙阿

子集[返回一个数据帧,你需要使用[[which 将返回一个向量。

df[x] %in% 1:3
#[1] FALSE

df[[x]] %in% 1:3
#[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE

对数据进行子集化。

x <- "neg.rank"
y <- "pos.rank"
df[df[[x]] %in% 1:3 | df[[y]] %in% 1:3, ]

#   gene pos.rank neg.rank
#1     A        1       10
#2     B        2        9
#3     C        3        8
#8     H        8        3
#9     I        9        2
#10    J       10        1

如果你想要单独的数据框。

df.x <- df[df[[x]] %in% 1:3, ]
df.y <- df[df[[y]] %in% 1:3, ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章