R 用相应的行名称替换列的值

R 用相应的行名称替换列的值,r,R,我的数据框架如下 ID e200 e200_cyp e200_rad e200_obl OTU_1 1 1 1 1 OTU_2 1 1 1 1 OTU_17 0 0 0 0 OTU_13 1 1 1 1 OTU_10 0 1 0 1 OTU_20 1

我的数据框架如下

ID      e200 e200_cyp  e200_rad e200_obl
OTU_1    1        1        1        1
OTU_2    1        1        1        1
OTU_17   0        0        0        0
OTU_13   1        1        1        1
OTU_10   0        1        0        1
OTU_20   1        0        1        0
我想用相应的行ID替换每列的值1。 需要帮忙吗?
非常感谢

我会将
ifelse
apply
功能结合使用:

df <- data.frame(e200 = c(1L, 1L, 0L, 1L, 0L, 1L), 
           e200_cyp = c(1L, 1L, 0L, 1L, 1L, 0L), 
           e200_rad = c(1L, 1L, 0L, 1L, 0L, 1L), 
           e200_obl = c(1L, 1L, 0L, 1L, 1L, 0L),
           row.names = c("OTU_1", "OTU_2", "OTU_17", 
                         "OTU_13", "OTU_10", "OTU_20"))

replace_by_string <- function(x, st) {
  ifelse(x, st, "")
} 

data.frame(lapply(df, replace_by_string, rownames(df)),
           row.names=rownames(df))

df我会将
ifelse
apply
功能结合使用:

df <- data.frame(e200 = c(1L, 1L, 0L, 1L, 0L, 1L), 
           e200_cyp = c(1L, 1L, 0L, 1L, 1L, 0L), 
           e200_rad = c(1L, 1L, 0L, 1L, 0L, 1L), 
           e200_obl = c(1L, 1L, 0L, 1L, 1L, 0L),
           row.names = c("OTU_1", "OTU_2", "OTU_17", 
                         "OTU_13", "OTU_10", "OTU_20"))

replace_by_string <- function(x, st) {
  ifelse(x, st, "")
} 

data.frame(lapply(df, replace_by_string, rownames(df)),
           row.names=rownames(df))

df一个简单的
lappy
就可以了

dat[, -1] <- lapply(dat[, -1], function(x){
    x[which(as.logical(x))] <- as.character(dat$ID[which(as.logical(x))])
    x
})
dat

dat[,-1]一个简单的
lappy
就可以了

dat[, -1] <- lapply(dat[, -1], function(x){
    x[which(as.logical(x))] <- as.character(dat$ID[which(as.logical(x))])
    x
})
dat

dat[,-1]我们可以使用
dplyr
tidyr

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  gather(Group, Value, -ID) %>%
  mutate(Value = ifelse(Value == 1, ID, Value)) %>%
  spread(Group, Value)
dt2
      ID   e200 e200_cyp e200_obl e200_rad
1  OTU_1  OTU_1    OTU_1    OTU_1    OTU_1
2 OTU_10      0   OTU_10   OTU_10        0
3 OTU_13 OTU_13   OTU_13   OTU_13   OTU_13
4 OTU_17      0        0        0        0
5  OTU_2  OTU_2    OTU_2    OTU_2    OTU_2
6 OTU_20 OTU_20        0        0   OTU_20
库(dplyr)
图书馆(tidyr)
dt2%
聚集(组,值,-ID)%%>%
mutate(Value=ifelse(Value=1,ID,Value))%>%
价差(集团、价值)
dt2
ID e200 e200_cyp e200_obl e200_rad
1 OTU_1 OTU_1 OTU_1 OTU_1 OTU_1
2 OTU_10 0 OTU_10 OTU_10 0
3 OTU_13 OTU_13 OTU_13 OTU_13 OTU_13
4 OTU_17 0 0 0
5 OTU_2 OTU_2 OTU_2 OTU_2 OTU_2 OTU_2
6 OTU_20 OTU_20 0 OTU_20
数据

dt <- read.table(text = "ID      e200 e200_cyp  e200_rad e200_obl
OTU_1    1        1        1        1
                 OTU_2    1        1        1        1
                 OTU_17   0        0        0        0
                 OTU_13   1        1        1        1
                 OTU_10   0        1        0        1
                 OTU_20   1        0        1        0",
                 header = TRUE, stringsAsFactors = FALSE)

dt我们可以使用
dplyr
tidyr
软件包

library(dplyr)
library(tidyr)

dt2 <- dt %>%
  gather(Group, Value, -ID) %>%
  mutate(Value = ifelse(Value == 1, ID, Value)) %>%
  spread(Group, Value)
dt2
      ID   e200 e200_cyp e200_obl e200_rad
1  OTU_1  OTU_1    OTU_1    OTU_1    OTU_1
2 OTU_10      0   OTU_10   OTU_10        0
3 OTU_13 OTU_13   OTU_13   OTU_13   OTU_13
4 OTU_17      0        0        0        0
5  OTU_2  OTU_2    OTU_2    OTU_2    OTU_2
6 OTU_20 OTU_20        0        0   OTU_20
库(dplyr)
图书馆(tidyr)
dt2%
聚集(组,值,-ID)%%>%
mutate(Value=ifelse(Value=1,ID,Value))%>%
价差(集团、价值)
dt2
ID e200 e200_cyp e200_obl e200_rad
1 OTU_1 OTU_1 OTU_1 OTU_1 OTU_1
2 OTU_10 0 OTU_10 OTU_10 0
3 OTU_13 OTU_13 OTU_13 OTU_13 OTU_13
4 OTU_17 0 0 0
5 OTU_2 OTU_2 OTU_2 OTU_2 OTU_2 OTU_2
6 OTU_20 OTU_20 0 OTU_20
数据

dt <- read.table(text = "ID      e200 e200_cyp  e200_rad e200_obl
OTU_1    1        1        1        1
                 OTU_2    1        1        1        1
                 OTU_17   0        0        0        0
                 OTU_13   1        1        1        1
                 OTU_10   0        1        0        1
                 OTU_20   1        0        1        0",
                 header = TRUE, stringsAsFactors = FALSE)
dt