jon*_*jon 5 replace r dataframe
这是一个小例子:
X1 <- c("AC", "AC", "AC", "CA", "TA", "AT", "CC", "CC")
X2 <- c("AC", "AC", "AC", "CA", "AT", "CA", "AC", "TC")
X3 <- c("AC", "AC", "AC", "AC", "AA", "AT", "CC", "CA")
mydf1 <- data.frame(X1, X2, X3)
Run Code Online (Sandbox Code Playgroud)
输入数据框
X1 X2 X3
1 AC AC AC
2 AC AC AC
3 AC AC AC
4 CA CA AC
5 TA AT AA
6 AT CA AT
7 CC AC CC
8 CC TC CA
Run Code Online (Sandbox Code Playgroud)
功能
# Function
atgc <- function(x) {
xlate <- c( "AA" = 11, "AC" = 12, "AG" = 13, "AT" = 14,
"CA"= 12, "CC" = 22, "CG"= 23,"CT"= 24,
"GA" = 13, "GC" = 23, "GG"= 33,"GT"= 34,
"TA"= 14, "TC" = 24, "TG"= 34,"TT"=44,
"ID"= 56, "DI"= 56, "DD"= 55, "II"= 66
)
x = xlate[x]
}
outdataframe <- sapply (mydf1, atgc)
outdataframe
X1 X2 X3
AA 11 11 12
AA 11 11 12
AA 11 11 12
AG 13 13 12
CA 12 12 11
AC 12 13 13
AT 14 11 12
AT 14 14 14
Run Code Online (Sandbox Code Playgroud)
问题,AC在输出中不等于12而不是11,类似于其他.只是一团糟!
(Exta:我也不知道如何摆脱rownames.)
只需使用apply
并转置:
t(apply (mydf1, 1, atgc))
Run Code Online (Sandbox Code Playgroud)
要使用sapply
,则可以使用:
stringsAsFactors=FALSE
创建数据框时,即
mydf1 <- data.frame(X1, X2, X3, stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
(感谢@joran)或
将函数的最后一行更改为:x = xlate[as.vector(x)]
归档时间: |
|
查看次数: |
154 次 |
最近记录: |