首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过level()函数将dataframe中的值转换为虚拟值?

如何通过level()函数将dataframe中的值转换为虚拟值?
EN

Stack Overflow用户
提问于 2017-08-22 04:49:29
回答 2查看 63关注 0票数 2

给定的数据是

代码语言:javascript
运行
复制
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。当我运行密码时,我发现它出了问题。

代码语言:javascript
运行
复制
Error in if (!check) { : argument is of length zero 

调试时,我发现这里的参数x是一个dataframe,我需要使用函数levels(x)来检查x的级别,还需要赋值levels(x)<- c(0,1,1)levels函数返回null。我的目的是根据条件将dataframe df 中的值转换为虚拟值。

代码语言:javascript
运行
复制
  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)。我怎么能这么做?

代码语言:javascript
运行
复制
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(SNP))
  }else {levels(SNPs)<-c(1,1,0)
  SNPs<-as.numeric(as.character(SNP))}
}

df_3levels<-sapply(1:ncol(df), function(i) dominant_dummy(df[,i, drop=FALSE]))
EN

回答 2

Stack Overflow用户

发布于 2017-08-22 05:32:56

无法检查数据帧上的级别。使用levels(SNPs[[1]])检查第一列的级别。但也有其他错误。

票数 0
EN

Stack Overflow用户

发布于 2017-08-23 22:11:18

通过对代码进行三次更改,我可以在没有错误消息的情况下执行它。最重要的变化是在最后一行。

代码语言:javascript
运行
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45809088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档