如何在 R 的 1 列中对只有奇数的行进行子集化

How to subset rows with only odd numbers in 1 column in R

我只想编译其中一列中包含奇数的行。我的数据框示例如下:

V1       V2     V3       V4        V5     V6      V7       V8
14221    USDJPY 20030507 20:00:00  116.33 116.19  116.47   116.25
14222    USDJPY 20030507 21:00:00  116.24 116.24  116.42   116.32
14223    USDJPY 20030507 22:00:00  116.33 116.29  116.42   116.40
14224    USDJPY 20030507 23:00:00  116.42 116.34  116.44   116.42
14227    USDJPY 20030508 02:00:00  116.48 116.42  116.67   116.58
14228    USDJPY 20030508 03:00:00  116.57 116.50  116.65   116.62
14229    USDJPY 20030508 04:00:00  116.61 116.59  116.67   116.62
14230    USDJPY 20030508 05:00:00  116.63 116.62  116.72   116.63
14231    USDJPY 20030508 06:00:00  116.64 116.56  116.64   116.62
14232    USDJPY 20030508 07:00:00  116.62 116.57  116.67   116.58
14264    USDJPY 20030509 15:00:00  117.40 117.29  117.44   117.29
14265    USDJPY 20030509 16:00:00  117.30 117.19  117.34   117.20
14266    USDJPY 20030509 17:00:00  117.19 117.19  117.26   117.19
14267    USDJPY 20030509 18:00:00  117.18 117.17  117.26   117.20
14268    USDJPY 20030509 19:00:00  117.22 117.17  117.25   117.19
14269    USDJPY 20030509 20:00:00  117.18 117.17  117.24   117.22
14270    USDJPY 20030509 21:00:00  117.23 117.18  117.25   117.18
14271    USDJPY 20030512 00:00:00  117.25 117.08  117.25   117.09
14272    USDJPY 20030512 01:00:00  117.10 116.59  117.10   116.99
14273    USDJPY 20030512 02:00:00  116.98 116.89  117.01   116.93
14274    USDJPY 20030512 03:00:00  116.94 116.84  116.94   116.88

我想获取一个数据子集,其中包含在 V3 列中具有奇数的行,这样我的新数据框将如下所示:

V1       V2     V3       V4        V5     V6      V7       V8
14221    USDJPY 20030507 20:00:00  116.33 116.19  116.47   116.25
14222    USDJPY 20030507 21:00:00  116.24 116.24  116.42   116.32
14223    USDJPY 20030507 22:00:00  116.33 116.29  116.42   116.40
14224    USDJPY 20030507 23:00:00  116.42 116.34  116.44   116.42
14264    USDJPY 20030509 15:00:00  117.40 117.29  117.44   117.29
14265    USDJPY 20030509 16:00:00  117.30 117.19  117.34   117.20
14266    USDJPY 20030509 17:00:00  117.19 117.19  117.26   117.19
14267    USDJPY 20030509 18:00:00  117.18 117.17  117.26   117.20
14268    USDJPY 20030509 19:00:00  117.22 117.17  117.25   117.19
14269    USDJPY 20030509 20:00:00  117.18 117.17  117.24   117.22
14270    USDJPY 20030509 21:00:00  117.23 117.18  117.25   117.18

这个问题的表述很糟糕,但如果我理解正确的话,它意味着做这样的事情:

col=3 #col is the # of the column where the numbers should be odd
dat[dat[,col]%%2==1,] #dat is the data frame or matrix containing your data

或者在你给出的例子中你也可以做

dat<-read.table("clipboard",header=T) #after having CTR+C the example frame from the question
dat[dat$V3 %% 2 == 1,]

对于特定列

df[df$V3 %% 2 != 0, ]

如果你的 data.frame 是 df

假设您要对任意列中奇数的行进行子集化

如果你的数据是

a <- c(1,2,3,4,5,6)
b <- c(1,2,3,5,6,6)
df <- data.frame(a,b)

> df
  a b
1 1 1
2 2 2
3 3 3
4 4 5
5 5 6
6 6 6 

尝试

df <- df[rowSums(df %% 2)!=0, ]

> df
  a b
1 1 1
3 3 3
4 4 5
5 5 6

这是我的 dplyr 解决方案:

library(dplyr)
data %>% filter(V3 %% 2 == 1)

为方便起见,创建一个测试奇数的函数。这是一个双线,但所有伟大的事情都不会发生在一条线上。我 +1 SabDem 的 dplyr 答案。我喜欢那个。

is.odd <- function(v) v %% 2 != 0

并且您可以将该函数用于与奇数相关的任何其他实例。

df1[is.odd(df1$V3), ]
      V1     V2       V3       V4     V5     V6     V7
1  14221 USDJPY 20030507 20:00:00 116.33 116.19 116.47
2  14222 USDJPY 20030507 21:00:00 116.24 116.24 116.42
3  14223 USDJPY 20030507 22:00:00 116.33 116.29 116.42
4  14224 USDJPY 20030507 23:00:00 116.42 116.34 116.44
11 14264 USDJPY 20030509 15:00:00 117.40 117.29 117.44
12 14265 USDJPY 20030509 16:00:00 117.30 117.19 117.34
       V8
1  116.25
2  116.32
3  116.40
4  116.42
11 117.29
12 117.20