我有一个数据帧(df),如下所示:
df$a df$b
T C 1 1 1 1
A G 0 1 1 0
C G 0 0 1 1
A T 0 0 0 0
我想要这个输出:
T C C C C C
A G A G G A
C G C C G G
A T A A A A
基本上,如果为零,则在df $ a列中输入字母;如果为1,则在df $ b列中输入字母,并替换零和一。
有人知道如何在R中执行此操作吗?
答案 0 :(得分:2)
您可以使用基本功能来执行此操作-请注意,我将第1列和第2列中的数据读取为字符,而不是因数。
df <- read.table(text = "
T C 1 1 1 1
A G 0 1 1 0
C G 0 0 1 1
A T 0 0 0 0", header = FALSE, stringsAsFactors = FALSE)
df[, 3:ncol(df)] <- sapply(df[, 3:ncol(df)], function(x) ifelse(x == 1, df[, 2], df[, 1]))
df
#> V1 V2 V3 V4 V5 V6
#> 1 T C C C C C
#> 2 A G A G G A
#> 3 C G C C G G
#> 4 A T A A A A
由reprex package(v0.2.1)于2019-01-25创建
答案 1 :(得分:2)
df[, -(1:2)] <- ifelse(df[, -(1:2)] == 1, df[, 2], df[, 1])
答案 2 :(得分:0)
这是基本的R解决方案。
df[-(1:2)] <- t(apply(df, 1, function(x) {
y <- as.numeric(x[-(1:2)])
x[1:2][y + 1]
}))
df
# a b c d e f
#1 T C C C C C
#2 A G A G G A
#3 C G C C G G
#4 A T A A A A
数据。
df <- read.table(text = "
a b c d e f
T C 1 1 1 1
A G 0 1 1 0
C G 0 0 1 1
A T 0 0 0 0
", header = TRUE)