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