我有以下数据框:
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:3
中pos.rank
或neg.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.x
并df.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] 删除。
我来说两句