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中,只剩下鱼。
非常感谢
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)) , ]
1] grepl有几个问题:
c
函数,因此c
并不是一个好名字,因此我们改用cc
grepl
并以l
结尾,而不是grep
,以获得逻辑向量结果,然后使用!否定它。rm
用于从工作空间中删除对象,而不是从数据框中删除行,因此我们改用下标。 未使用任何软件包。
cc[!grepl("z", rownames(cc)), ]
## c1 c2 c3
## fish 89 89 0
[2)grep或者,也可以将grep
与invert=TRUE
参数一起使用:
cc[grep("z", rownames(cc), invert = TRUE), ]
## c1 c2 c3
## fish 89 89 0
3] substr在示例中,z
字符始终显示为第一个字符,因此,如果通常是这种情况,我们可以交替使用:
cc[substr(rownames(cc), 1, 1) != "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")
您的示例使用了不推荐使用的属性。我已经对其进行了一些编辑。
// 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中的中心函数。