如果行名包含 R 中的特定单词,则将值设置为 0

Set values to 0 if rownames contains specific words in R

考虑 R 中的以下 data.frame:

df <- data.frame(Agriculture = c(2,7,2),
                 Fishery     = c(1,4,7),
                 Industry    = c(5,7,3))

rownames(df) <- t(colnames(df))

如果行名是“渔业”或“工业”,我想将行值设置为 0。我可以很容易地这样做:

df[2:3,1:3] <- 0

但是,就我而言,我有一个很大的 data.frame 这种方法不是最好的。相反,我想为行名称匹配定义一个字符向量,如下所示:

list_of_industries <- c("Fishery", "Industry")

之后,这应该用于将我的 df 中的值设置为 0。但不确定我应该怎么做。如何在 R 中做到这一点?

您可以将 which()%in% 一起使用来找出哪一行具有目标行名。

我原来的回答

df[which(rownames(df) %in% list_of_industries), ] <- 0

更新了@Ritchie Sacramento 的回答

@Ritchie Sacramento 在此回答下的评论中指出我们可以直接使用向量来匹配行名。

df[list_of_industries, ] <- 0

输出

上面的两个代码生成相同的输出。

            Agriculture Fishery Industry
Agriculture           2       1        5
Fishery               0       0        0
Industry              0       0        0