根据条件将字符附加到行名称
Appending Characters to Row Names Based on Condition
我有一个大型数据框,我想根据条件将字符附加到行名称。我有以下示例:
trees <- data.frame(char = c('flower', 'cone', 'flower', 'cone'), number = c(3, 3, 5, 6))
rownames(trees) <- c('birch', 'pine', 'maple', 'redwood')
这就是我想要的,'c' 在松树和红木旁边:
char number
birch flower 3
pine c cone 3
maple flower 5
redwood c cone 6
我知道我可以使用粘贴来附加字符:
# this gives the output I am looking for
paste(rownames(trees[trees$char == 'cone',]), 'c')
[1] "pine c" "redwood c"
但是,当我尝试下面这行代码时,更改没有出现在我的数据框中:
rownames(trees[trees$char == 'cone',]) <- paste(rownames(trees[trees$char == 'cone',]), 'c')
trees$char
是一个向量(一维)。所以不需要 [,]
。这不值得回答,但很难在刚刚发布的评论中提及。
嘿! bdw 我现在意识到,另一点要提到的是,在你的代码中你没有将它分配回原来的 data.frame
树,而是分配给子集 data.frame
的权利,这样就不会反映出来
rownames(trees)[trees$char == "cone"] <- paste(rownames(trees)[trees$char == "cone"], "c")
您可以使用 ifelse 函数来定义行名:如果 char 值为 "cone",则将 "c" 粘贴到当前行名的末尾,否则使用现有的行名。
rownames(trees) <- ifelse(trees$char=="cone",paste(rownames(trees), 'c'),rownames(trees))
一个选项是
library(stringr)
x1 <- str_extract(trees$char, "^c")
row.names(trees) <- trimws(paste(row.names(trees), replace(x1, is.na(x1), "")))
trees
# char number
#birch flower 3
#pine c cone 3
#maple flower 5
#redwood c cone 6
另一种选择是
row.names(trees) <- paste(row.names(trees), c("", "c")[(trees$char == "cone")+1])
我有一个大型数据框,我想根据条件将字符附加到行名称。我有以下示例:
trees <- data.frame(char = c('flower', 'cone', 'flower', 'cone'), number = c(3, 3, 5, 6))
rownames(trees) <- c('birch', 'pine', 'maple', 'redwood')
这就是我想要的,'c' 在松树和红木旁边:
char number
birch flower 3
pine c cone 3
maple flower 5
redwood c cone 6
我知道我可以使用粘贴来附加字符:
# this gives the output I am looking for
paste(rownames(trees[trees$char == 'cone',]), 'c')
[1] "pine c" "redwood c"
但是,当我尝试下面这行代码时,更改没有出现在我的数据框中:
rownames(trees[trees$char == 'cone',]) <- paste(rownames(trees[trees$char == 'cone',]), 'c')
trees$char
是一个向量(一维)。所以不需要 [,]
。这不值得回答,但很难在刚刚发布的评论中提及。
嘿! bdw 我现在意识到,另一点要提到的是,在你的代码中你没有将它分配回原来的 data.frame
树,而是分配给子集 data.frame
的权利,这样就不会反映出来
rownames(trees)[trees$char == "cone"] <- paste(rownames(trees)[trees$char == "cone"], "c")
您可以使用 ifelse 函数来定义行名:如果 char 值为 "cone",则将 "c" 粘贴到当前行名的末尾,否则使用现有的行名。
rownames(trees) <- ifelse(trees$char=="cone",paste(rownames(trees), 'c'),rownames(trees))
一个选项是
library(stringr)
x1 <- str_extract(trees$char, "^c")
row.names(trees) <- trimws(paste(row.names(trees), replace(x1, is.na(x1), "")))
trees
# char number
#birch flower 3
#pine c cone 3
#maple flower 5
#redwood c cone 6
另一种选择是
row.names(trees) <- paste(row.names(trees), c("", "c")[(trees$char == "cone")+1])