将data.frame中的列转换为数字类型以计算R中的平均值

时间:2017-11-21 09:43:54

标签: r dataframe

我是编码的新手,我尽力找到答案,但没有任何效果。所以我希望你能帮助我: 我有来自96孔板的数据,我设法通过使用Plater包将其转换为整洁的数据。看起来像这样:

> print(PlaterTest)
# A tibble: 96 x 4
   Wells `Amino acid position` Mutant Fluorescence
 * <chr>                 <chr>  <chr>        <int>
 1   A01                   D46      A          456
 2   A02                   D46      Y          856
 3   A03                   D46      R          356

此data.frame包含一些空白值。我想计算平均值并从所有其他值中减去它。所以计算平均值我找到了以下代码:

meanblank <- mean(PlaterTest[PlaterTest$`Amino acid position` == "blank", "Fluorescence"])

但是我得到了:

Warning message:
In mean.default(PlaterTest[PlaterTest$`Amino acid position` == "blank",  :
  argument is not numeric or logical: returning NA

所以我试图通过使用许多不同的方法将“荧光”列转换为数字类型,最后发现:

PlaterTest$Fluorescence = as.numeric(as.character(PlaterTest$Fluorescence))

所以现在我得到了:

> print(PlaterTest)
# A tibble: 96 x 4
   Wells `Amino acid position` Mutant Fluorescence
 * <chr>                 <chr>  <chr>        <dbl>
 1   A01                   D46      A          456
 2   A02                   D46      Y          856
 3   A03                   D46      R          356

我还找到了具有给定结果的以下代码行:

> sapply(PlaterTest, class)
          Wells Amino acid position              Mutant        Fluorescence 
    "character"         "character"         "character"           "numeric" 

但是我仍然无法使用上面显示的代码计算平均值,因为它仍然给出了相同的错误消息。我认为我对不同的数据类型有一些麻烦。我希望你能帮助我。

1 个答案:

答案 0 :(得分:2)

OP的数据集是tibbletibble没有默认drop=TRUE,只有在选择了一个列时才会删除维度。所以,基本上,它仍然是tibble

PlaterTest[PlaterTest$`Amino acid position` == "blank", "Fluorescence"]
# A tibble: 2 x 1
#  Fluorescence
#         <int>
#1          856
#2          356

mean无法与data.frametibble合作。根据{{​​1}}

?mean
  

x - 一个R对象。目前有数字/逻辑方法   矢量和日期,日期时间和时间间隔对象。复杂的载体   仅允许trim = 0。

所以,它需要一个mean(x, ...) 。因此,选择是提取“荧光”&#39;作为vector和子集,它基于&#39;空白&#39; “氨基酸位置”中的值&#39;柱

vector

另外,我们可以使用PlaterTest$Fluorescence[PlaterTest$`Amino acid position` == "blank"] #[1] 856 356 mean(PlaterTest$Fluorescence[PlaterTest$`Amino acid position` == "blank"]) #[1] 606 方法

tidyverse

数据

library(dplyr)
PlaterTest %>%
         filter(`Amino acid position` == 'blank') %>%
         summarise(Mean = mean(Fluorescence)) %>%
         pull(Mean)