繁体   English   中英

R 根据索引删除dataframe中的所有行

[英]R Delete all rows in dataframe based on index

我有一个索引列表,我知道我想从我的数据框中删除这些索引。

通常我只需写出名称即可轻松完成此操作,但我不明白为什么当我想保留要删除的行时以下命令有效:

str(data)
'data.frame':   180 obs. of  624 variables:
$ Sites                                              : chr  "SS0501_1" "SS0570_1" "SS0609_1" "SS0645_1" ...
$ LandUse                                            : chr  "Urban" "Urban" "Urban" "Urban" ...
.
.
.

f_pattern <- "SS2371|SS1973|SS1908|SS1815|SS1385|SS1304" # find index names in data frame using partial site names
get_full_id <- data[grep(f_pattern, rownames(data)),] # get the full site names (these are indices in the data frame)

data <- data[!get_full_id$Sites,] # DOES NOT WORK
Error in !check$Sites : invalid argument type

但是,如果我将这些站点拉出,它确实有效。

data <- data[get_full_id$Sites,] # Works fine, I get a dataframe with 6 rows...the ones I don't want to keep.
str(data)
'data.frame':   6 obs. of  624 variables:
$ Sites                                              : chr  "SS1908_1" "SS1973_1" "SS1304_2" "SS1385_2" ...
$ LandUse                                            : chr  "Urban" "Rural" "Rural" "Urban" ...
.
.

我不明白为什么用“?”反转根本行不通?

如果数据集有行名,那么我们可能需要-而不是! (如果它是完全匹配的(- 不清楚,因为没有显示行名))

data[-get_full_id$Sites,]

因为否定适用于逻辑向量。 在这里,我们要求返回与“站点”列中的行名不匹配的行。 如果我们想使用! , 创建一个逻辑向量

data[!row.names(data) %in% get_full_id$Sites,]

这也仅在完全匹配时才有效


此外,这可以直接完成

data[-grep(f_pattern, rownames(data)),]

或者使用invert = TRUE

data[grep(f_pattern, rownames(data), invert = TRUE),]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM