如果行名包含 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
考虑 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