0

我的日期集有问题,它包含多个序列信息,而其他行只是“NA”。数据如下:

> dat[90:100,]
           V1 V2 V3   V4  V5  V6                        V7 V8
90  Sequence: 90 NA   NA  NA                               NA
91  Sequence: 91 NA   NA  NA                               NA
92  Sequence: 92 NA   NA  NA                               NA
93  Sequence: 93 NA   NA  NA                               NA
94          1 25  3  8.3 3.0 100                         0 50
95          0  0 68 32.0 0.9 GGT GGTGGTGGTGGTGGTGGTGGTGGTG NA
96  Sequence: 94 NA   NA  NA                               NA
97  Sequence: 95 NA   NA  NA                               NA
98  Sequence: 96 NA   NA  NA                               NA
99  Sequence: 97 NA   NA  NA                               NA
100 Sequence: 98 NA   NA  NA                               NA

我想保留包含序列信息的 93 到 95 行,并删除其他行:

93  Sequence: 93 NA   NA  NA                               NA
94          1 25  3  8.3 3.0 100                         0 50
95          0  0 68 32.0 0.9 GGT GGTGGTGGTGGTGGTGGTGGTGGTG NA

有什么办法可以在R中做到吗?例如for循环?

4

2 回答 2

1

如果要删除 NA 行,请查看is.na函数并将其反转:

dat2 <- dat[!is.na(dat$V3), ]

如果您只想要数据框的一部分,请按如下方式指定:

dat2 <- dat[93:95, ]

但我认为你已经知道如何做到这一点,所以我并不完全清楚你在问什么。我怀疑你想删除 NA 行。

于 2013-10-31T18:56:10.167 回答
0

不就是这样吗:

dat[!grepl('Sequence', dat$V1), ]

- 更新 -

很抱歉,我没有看到您也想要上面的行。这应该有效。

rows <- dat[!grepl('Sequence', dat$V1), ] # rows that don't contain 'Sequence'
rows <- as.numeric(row.names(rows))       # convert row.names to numeric
rows2 <- rows - 1                         # take previous rows
rows2 <- unique(c(rows2, rows))           # de-dupe
dat[rows2, ]                              # all the rows you want

#          V1 V2 V3   V4  V5  V6                        V7 V8
# 4 Sequence: 93 NA   NA  NA                               NA
# 5         1 25  3  8.3 3.0 100                         0 50
# 6         0  0 68 32.0 0.9 GGT GGTGGTGGTGGTGGTGGTGGTGGTG NA
于 2013-10-31T18:59:04.103 回答