R 替换多个列中的字符
我有一个数据框,如下所示:R 替换多个列中的字符,r,R,我有一个数据框,如下所示: df <- data.frame(list(Anemone=c(0, "S", "A", 0, "F", "R", 0, "F", "F"), Bivalve=c(0, 0, "R", "R", "S", 0, 0, 0, 0),
df <- data.frame(list(Anemone=c(0, "S", "A", 0, "F", "R", 0, "F", "F"),
Bivalve=c(0, 0, "R", "R", "S", 0, 0, 0, 0),
Bryozoa=c("A", "A", "F", 0, 0, 0, 0, 0, "R")))
df
如果您想坚持使用baseR,可以使用匿名函数将stringr函数替换为gsub
。试试这个
> list2DF(lapply(df, gsub, pattern = "^\\D+$", replacement = "1"))
Anemone Bivalve Bryozoa
1 0 0 1
2 1 0 1
3 1 1 1
4 0 1 0
5 1 1 0
6 1 0 0
7 0 0 0
8 1 0 0
9 1 0 1
df1如果非字母为0
,则可以使用:
+(df != 0)
# Anemone Bivalve Bryozoa
# [1,] 0 0 1
# [2,] 1 0 1
# [3,] 1 1 1
# [4,] 0 1 0
# [5,] 1 1 0
# [6,] 1 0 0
# [7,] 0 0 0
# [8,] 1 0 0
# [9,] 1 0 1
如果不是,则字母为大写:
df[sapply(df,%单位%,字母)]
> list2DF(lapply(df, gsub, pattern = "^\\D+$", replacement = "1"))
Anemone Bivalve Bryozoa
1 0 0 1
2 1 0 1
3 1 1 1
4 0 1 0
5 1 1 0
6 1 0 0
7 0 0 0
8 1 0 0
9 1 0 1
df1 <- as.data.frame(sapply(df, function(x) sub("[A-Z]", "1", x)))
df1
Anemone Bivalve Bryozoa
1 0 0 1
2 1 0 1
3 1 1 1
4 0 1 0
5 1 1 0
6 1 0 0
7 0 0 0
8 1 0 0
9 1 0 1
+(df != 0)
# Anemone Bivalve Bryozoa
# [1,] 0 0 1
# [2,] 1 0 1
# [3,] 1 1 1
# [4,] 0 1 0
# [5,] 1 1 0
# [6,] 1 0 0
# [7,] 0 0 0
# [8,] 1 0 0
# [9,] 1 0 1
df[sapply(df, "%in%", LETTERS)] <- 1
df
# Anemone Bivalve Bryozoa
#1 0 0 1
#2 1 0 1
#3 1 1 1
#4 0 1 0
#5 1 1 0
#6 1 0 0
#7 0 0 0
#8 1 0 0
#9 1 0 1
df[sapply(df, "%in%", c(letters, LETTERS))] <- 1