如何通过levels()函数将数据帧中的值转换为虚拟值?

时间:2017-08-22 04:49:30

标签: r levels

给定的数据是

SNP1 <- c("AA","GG","AG")
SNP2 <- c("AA","CC","AC")
SNP3 <- c("GG","AA","AG")
df<- data.frame(SNP1, SNP2, SNP3)
colnames(df)<- c('rs10000438', 'rs10000500','rs1000055')

我定义了一个dominant_dummy的数据函数。当我运行代码时,我发现它出错了。

Error in if (!check) { : argument is of length zero 

当我调试时,我发现这里的参数xdataframe,我需要使用函数levels(x)来检查x的级别,并且还要分配{{ 1}},levels(x)<- c(0,1,1)函数返回levels我的目的是根据条件将数据框null中的值转换为虚拟值。

df

我需要将虚拟值分配给此 SNP_lib<- NCBI_snp_query(names(x)) NCBI_snp_query(names(x)) SNP_min<- SNP_lib$Minor SNP_name<- SNP_lib$Query SNP_min ="A" SNPs <- x check<-substr(levels(SNPs)[2],1,1)==SNP_min ,例如dataframe。我怎么能这样做?

levels(x)<- c(0,1,1)

2 个答案:

答案 0 :(得分:0)

您无法检查数据框的级别。请改用levels(SNPs[[1]])来检查第一列的级别。 但也存在其他错误。

答案 1 :(得分:0)

对代码进行三次更改后,我可以执行它而不会出现错误消息。最重要的变化是在最后一行。

SNP1 <- c("AA", "GG", "AG")
SNP2 <- c("AA", "CC", "AC")
SNP3 <- c("GG", "AA", "AG")
df <- data.frame(SNP1, SNP2, SNP3)
colnames(df) <- c('rs10000438', 'rs10000500', 'rs1000055')

library(rsnps)
dominant_dummy <- function(x) {
  SNP_lib <- NCBI_snp_query(names(x))
  NCBI_snp_query(names(x))

  SNP_min <- SNP_lib$Minor
  SNP_name <- SNP_lib$Query
  SNP_min = "A"
  SNPs <- x

  check <- substr(levels(SNPs)[2], 1, 1) == SNP_min
  if (!check) {
    levels(SNPs) <- c(0, 1, 1)
    SNPs <- as.numeric(as.character(SNPs)) # fixed
  } else {
    levels(SNPs) <- c(1, 1, 0)
    SNPs <- as.numeric(as.character(SNPs)) # fixed
  }
}

df_3levels <- sapply(df, dominant_dummy) # fixed

df_3levels
     rs10000438 rs10000500 rs1000055
[1,]          1          1         0
[2,]          0          0         1
[3,]          1          1         1

请告诉我这是否是预期结果。