c <- data.frame("c1"=c(78,89,0),"c2"=c(89,89,34),"c3"=c(56,0,4)) row.names(c) <- c("zebra","fish","zucchini") c <- rm(grep("z",rownames(c))) ??
希望问题简短,答案简短:上面的代码有什么问题?它说我“必须包含名称或字符串”。我如何删除所有行中包含z的行。在这个reprex中只剩下鱼。非常感谢
k4ymrczo1#
1)grepl有几个问题:
c
cc
grepl
l
grep
rm
未使用任何包。
cc[!grepl("z", rownames(cc)), ] ## c1 c2 c3 ## fish 89 89 0
2)grep作为替代,也可以使用grep和invert=TRUE参数:
invert=TRUE
cc[grep("z", rownames(cc), invert = TRUE), ] ## c1 c2 c3 ## fish 89 89 0
3)substr在示例中,z字符总是作为第一个字符出现,因此如果通常是这种情况,我们可以交替用途:
z
cc[substr(rownames(cc), 1, 1) != "z", ] ## c1 c2 c3 ## fish 89 89 0
3a)startsWith如果z必须是第一个字符,另一种方法是:
cc[!startsWith(rownames(cc), "z"), ] ## c1 c2 c3 ## fish 89 89 0
cc <- data.frame(c1 = c(78, 89, 0), c2 = c(89, 89, 34), c3 = c(56, 0, 4)) row.names(cc) <- c("zebra", "fish", "zucchini")
hgc7kmma2#
Rm删除对象。您正在尝试按行筛选。
c <- data.frame("c1"=c(78,89,0),"c2"=c(89,89,34),"c3"=c(56,0,4)) row.names(c) <- c("zebra","fish","zucchini") print( c ) c[ !grepl("z",rownames(c)) , ]
kzipqqlq3#
您的示例使用了不推荐使用的属性。我对它进行了一些编辑。/Edit:现在我明白你想删除这些行了,请看下面的例子:
c <- tibble("c1"=c(78,89,0),"c2"=c(89,89,34),"c3"=c(56,0,4), "rownames"=c("zebra","fish","zucchini")) %>% column_to_rownames("rownames") c[!grepl("i", rownames(c)),] c1 c2 c3 zebra 78 89 56
另外,正如前面指出的,c不应该是一个对象名,因为它也是R中的一个中心函数。
3条答案
按热度按时间k4ymrczo1#
1)grepl有几个问题:
c
不是一个好名字,因为在R中c
函数的使用无处不在,所以我们使用cc
来代替grepl
,结尾是l
,而不是grep
,以获得逻辑向量结果,然后使用!对它求反。rm
用于从工作区中删除对象,而不是从数据框中删除行,因此我们使用下标。未使用任何包。
2)grep作为替代,也可以使用
grep
和invert=TRUE
参数:3)substr在示例中,
z
字符总是作为第一个字符出现,因此如果通常是这种情况,我们可以交替用途:3a)startsWith如果
z
必须是第一个字符,另一种方法是:注解
hgc7kmma2#
Rm删除对象。您正在尝试按行筛选。
kzipqqlq3#
您的示例使用了不推荐使用的属性。我对它进行了一些编辑。
/Edit:现在我明白你想删除这些行了,请看下面的例子:
另外,正如前面指出的,c不应该是一个对象名,因为它也是R中的一个中心函数。