[英]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.