Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按条件在多列之间交换值_R - Fatal编程技术网

R 按条件在多列之间交换值

R 按条件在多列之间交换值,r,R,我有这样一个数据框: df = read.table(text="IDX D1 D2 D3 D4 D5 D6 D7 F 0/0 1/1 0/0 0/1 1/1 0/0 0/0 F 1/1 0/0 0/0 0/0 0/0 1/1 0/0 T 0/0 0/0 0/0 0/0 0

我有这样一个数据框:

df = read.table(text="IDX     D1     D2       D3     D4      D5       D6      D7
 F     0/0     1/1     0/0     0/1     1/1     0/0     0/0
 F     1/1     0/0     0/0     0/0     0/0     1/1     0/0
 T     0/0     0/0     0/0     0/0     0/0     0/0     0/0
 T     0/1     0/1     0/0     1/1     0/1     0/0     0/1
 F     1/1     0/1     1/1     0/0     0/1     0/0     0/0", header=T, stringsAsFactors=F)
如果
df$IDX==F

预期结果:

 IDX     D1     D2       D3     D4      D5       D6      D7
  F     1/1     0/0     1/1     1/0     0/0     1/1     1/1
  F     0/0     1/1     1/1     1/1     1/1     0/0     1/1
  T     0/0     0/0     0/0     0/0     0/0     0/0     0/0
  T     0/1     0/1     0/0     1/1     0/1     0/0     0/1
  F     0/0     1/0     0/0     1/1     1/0     1/1     1/1

这是使用
lappy
的一种方法:

#subsetting the df to just replace the elements we need
df[df$IDX==FALSE, -1] <- lapply(df[df$IDX==FALSE, -1], function(x) {
  #chartr is translates specific characters to different ones
  #here it converts 0s -> 1s and vice versa
  chartr("01", "10", x)
})

不使用
lappy

df[df$IDX==FALSE, -1] <- chartr("01", "10", as.matrix(df[df$IDX==FALSE, -1]))
df
#     IDX  D1  D2  D3  D4  D5  D6  D7
# 1 FALSE 1/1 0/0 1/1 1/0 0/0 1/1 1/1
# 2 FALSE 0/0 1/1 1/1 1/1 1/1 0/0 1/1
# 3  TRUE 0/0 0/0 0/0 0/0 0/0 0/0 0/0
# 4  TRUE 0/1 0/1 0/0 1/1 0/1 0/0 0/1
# 5 FALSE 0/0 1/0 0/0 1/1 1/0 1/1 1/1

df[df$IDX==FALSE,-1]chartr函数使解决方案变得简单!谢谢
df[df$IDX==FALSE, -1] <- chartr("01", "10", as.matrix(df[df$IDX==FALSE, -1]))
df
#     IDX  D1  D2  D3  D4  D5  D6  D7
# 1 FALSE 1/1 0/0 1/1 1/0 0/0 1/1 1/1
# 2 FALSE 0/0 1/1 1/1 1/1 1/1 0/0 1/1
# 3  TRUE 0/0 0/0 0/0 0/0 0/0 0/0 0/0
# 4  TRUE 0/1 0/1 0/0 1/1 0/1 0/0 0/1
# 5 FALSE 0/0 1/0 0/0 1/1 1/0 1/1 1/1