我有一个这样的数据框:
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)
Run Code Online (Sandbox Code Playgroud)
如果是,我想交换0和1之间的字符 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
Run Code Online (Sandbox Code Playgroud)
这是使用它的一种方法lapply:
#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)
})
Run Code Online (Sandbox Code Playgroud)
输出:
> 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
Run Code Online (Sandbox Code Playgroud)