繁体   English   中英

在R中按行替换数据框中的值

[英]Replacing values in a dataframe by row in R

R中是否有一种方法可以将矩阵/数据帧每一行中的值替换为该行中的特定值?

例如,我有以下矩阵:

df<-cbind(c("A","C","G","T"),c("T","G","C","A"),c(0,1,0,1),c(1,0,1,0),c(0,1,0,1))

df
#     [,1] [,2] [,3] [,4] [,5]
#[1,] "A"  "T"  "0"  "1"  "0"
#[2,] "C"  "G"  "1"  "0"  "1"
#[3,] "G"  "C"  "0"  "1"  "0"
#[4,] "T"  "A"  "1"  "0"  "1"

我想用该行第一列中的相应字母替换每一行中的零,以便新矩阵如下所示:

newdf
#     [,1] [,2] [,3] [,4] [,5]
#[1,] "A"  "T"  "A"  "1"  "A"
#[2,] "C"  "G"  "1"  "C"  "1"
#[3,] "G"  "C"  "G"  "1"  "G"
#[4,] "T"  "A"  "1"  "T"  "1"

我能够获得的最接近的命令是以下命令,但它不会用列1中的正确值替换零。

df[df==0]<-NA
df[, 3:ncol(df)][is.na(df[, 3:ncol(df)])] <- df[,1]

我们可以复制第一列以使长度相等,然后根据逻辑矩阵进行分配。 它将子集与rhs中相同长度的元素

i1 <- df == 0
newdf <- df
newdf[i1] <- df[,1][row(df)][i1]
newdf
     [,1] [,2] [,3] [,4] [,5]
#[1,] "A"  "T"  "A"  "1"  "A" 
#[2,] "C"  "G"  "1"  "C"  "1" 
#[3,] "G"  "C"  "G"  "1"  "G" 
#[4,] "T"  "A"  "1"  "T"  "1" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM