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