查找向量中存在的列并替换等于1的值

Aud*_*leF 1 r vector dataframe

我有一个看起来像二进制数据集

     a    b    c   d
 r1  1    1    0   0
 r2  0    1    1   0
 r3  1    0    0   1
Run Code Online (Sandbox Code Playgroud)

和一个矢量

 V <- c("a", "c") 
Run Code Online (Sandbox Code Playgroud)

我想要一个命令来搜索colnames并更改这些列中的值.例如,将1更改为A.因此输出将为:

     a    b    c   d
 r1  A    1    0   0
 r2  0    1    A   0
 r3  A    0    0   1
Run Code Online (Sandbox Code Playgroud)

Sot*_*tos 5

这是一种矢量化的方法,

df[names(df) %in% V] <- replace(df[names(df) %in% V], df[names(df) %in% V] == 1, 'A')

#or avoid calling the %in% part 3 times by assigning it, i.e.

i1 <- names(df) %in% V
df[i1] <- replace(df[i1], df[i1] == 1, 'A')

#or a more simplified syntax, compliments of @Cath,

df[, V][df[, V]==1] <- "A"
Run Code Online (Sandbox Code Playgroud)

这使,

   a b c d
r1 A 1 0 0
r2 0 1 A 0
r3 A 0 0 1
Run Code Online (Sandbox Code Playgroud)

  • `df [,V] [df [,V] == 1] < - "A"`也会起作用;-) (3认同)