【问题标题】:How can I iterate the levels of a factor in R?如何迭代 R 中因子的级别?
【发布时间】:2020-11-21 19:04:43
【问题描述】:

我想创建一个函数,通过访问第一个字母来帮助我识别因子级别中可能存在的错误,因此我首先专注于识别部分。

数据框 '''

alleles<-(c('A*24:02', 'A*11:01', 'blank',  'A*31:01'))
as.factor(alleles)
freq<-c(0.3782, 0.4209, 0.0362, 0.0761)

df<-data.frame(alleles, freq)

'''

我的尝试_ '''

for(i in df$alleles){
  if (i != 'A'){
    can<-c()
    append(can, i)
    df$alleles<-df$alleles[-c(can)]
  }
}

''' 错误信息 -c(can) 中的错误:一元运算符的参数无效

观察 如果我执行 '''print(can)''',则输出为“NULL”,这意味着它无法使用“append”。

【问题讨论】:

  • 请提供您的预期结果。理解你的代码应该做什么有点困难。如果你只想要alleles中的第一个字符,你可以使用substr(df$alleles, 1, 1)

标签: r r-factor


【解决方案1】:

你也可以试试:

#Data
alleles<-(c('A*24:02', 'A*11:01', 'blank',  'A*31:01'))
freq<-c(0.3782, 0.4209, 0.0362, 0.0761)
df<-data.frame(alleles, freq)
can<-c()
#Check
for(i in 1:length(df$alleles))
{
  if (substr(df$alleles[i],1,1) != 'A'){
    can <- c(can, as.character(df$alleles[i]))
  }
}
#Apply
df<-df[-which(df$alleles %in% can),]

输出:

df
  alleles   freq
1 A*24:02 0.3782
2 A*11:01 0.4209
4 A*31:01 0.0761

【讨论】:

  • 太不可思议了,非常感谢!我想知道你能不能告诉我如何找到'%in%.我输入了 '?%in%' 但它不起作用
  • @Christ14n97 试试 ?在
  • @Christ14n97 另请查看有关该操作员的帖子stackoverflow.com/questions/12730629/…
  • 非常感谢您的帮助!
【解决方案2】:

为什么不直接使用正则表达式?

df[grepl("^A", df$alleles),]

【讨论】:

    【解决方案3】:

    我们可以使用grep

    df[grep("^A", df$alleles),]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-27
      • 2016-03-12
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多