【问题标题】:R Subset "[..]" wrong valuesR 子集“[..]”错误值
【发布时间】:2021-08-29 22:33:27
【问题描述】:

我在 R 方面非常自学,所以我没有那么多专业知识。 但是,当我最近检查一些“三重”子集数据时,我发现了一些我无法解释的错误,即使经过几次实验性尝试。

> data <- read.csv("MEC7 table_R.csv", header = TRUE, sep = ";")
> show(data)
   Accession Nitrogen.supply Replicate chlorophylle.A chlorophylle.B carotenoids  phenols flavanoids carbohydrates   proteins
1      HM022             Fix         2       35.71822       13.61773    5.328781 349.0419  116.20386      108.6696   4.602691
2      HM022             Fix         4       72.79944       26.31981   12.419295 324.1432         NA      113.3090  10.127329
3      HM022             Fed         3       40.84556       14.78139    7.844996 424.2241  118.89316      149.3712   8.624055
4      HM022             Fed         4       51.43829       18.34177   10.417405 428.2580         NA      120.8249  71.665152
5      HM022             Fix         3       55.42231       18.73236    5.644060 210.9737  104.85056      391.5803   6.043350
6      HM022             Fed         2       55.77691       18.66710    7.606938 359.6686  117.05009      271.1971   7.368690
7      HM306             Fed         3       51.23863       20.18586    8.830432 444.5283  158.76851      324.4583   2.757425
8      HM306             Fix         4       90.45100       31.74905   14.505800 388.7416  113.75900      250.3901  16.132638
9      HM022             Fix         1       66.61150       22.31275   11.134300 328.1411  152.92800      387.9007   7.821263
10     HM022             Fed         1       67.63950       21.24895   12.076750 483.3238  130.51800      273.0234   6.382024
11     HM306             Fed         2       65.51469       22.45891   13.603800       NA         NA            NA         NA
12     HM306             Fix         2      117.65653       37.67211   20.725213       NA         NA            NA         NA
13     HM306             Fix         3      100.54241       34.42628   20.371192       NA         NA     1273.3765 244.340559
14     HM306             Fed         1       58.26609       22.47596   10.582551 317.4561   99.01719      319.1538   5.822906
15     HM306             Fed         1       66.12246       22.63671   13.222049 399.5537   96.86456      437.4982   4.082517
16     HM306             Fed         4       84.31291       29.05635   17.092142 411.3784   75.22140      387.2773   5.593258
> Chla <- data$chlorophylle.A
> Chla022 <- Chla[data$Accession=="HM022"]
> Chla022Fix <- Chla022[data$Nitrogen.supply=="Fix"]
> Chla022Fix
[1] 35.71822 72.79944 55.42231 67.63950       NA       NA       NA   

如您所见,第 9 行(“Fix”)的值与第 10 行(“Fed”)的值混淆了,其他列中也出现了类似的错误(chlb、类胡萝卜素等)。我也不清楚NA值。 我错过了什么吗?这对我来说非常令人不安。 提前感谢您的帮助:)

【问题讨论】:

    标签: r subset


    【解决方案1】:

    这是你要找的吗?

    library(dplyr)
    
    df %>%
      filter(Accession=="HM022" & Nitrogen.supply=="Fix") %>%
      pull(chlorophylle.A)
    
    [1] 35.71822 72.79944 55.42231 66.61150
    

    在基础 R 中,您可以执行以下解决方案。这里 [[() 等效于 function(x) x[["chlorophylle.A"]] ,以防您想提取数据框的 chlorophylle.A 列。

    `[[`(subset(df, Accession=="HM022" & Nitrogen.supply=="Fix"), "chlorophylle.A")
    
    [1] 35.71822 72.79944 55.42231 66.61150
    

    或者,如果您想坚持自己的代码。首先请记住,我们按行对数据集进行子集化,其中变量 AccessionNitrogen.supply 满足我们的要求。之后我们提取我们想要的列 chlorophylle.A:

    df <- df[df$Accession == "HM022" & df$Nitrogen.supply == "Fix", ] 
    df <- df$chlorophylle.A
    
    [1] 35.71822 72.79944 55.42231 66.61150
    

    【讨论】:

    • 非常感谢您的意见!我会调查的!所以我想我的主要错误是先选择列然后再选择行。是的,你得到的结果就是我想要的;)
    • 其实没有错。在您的最后一行代码Chla022[data$Nitrogen.supply=="Fix"] 中,括号中表达式的长度比Chla022 长,这里实际上是4。而 data$Nitrogen.supply=="Fix" 有 7 个元素,这就是为什么输出中有 3 个 NA 值。您可以运行每一段代码并进行验证。不客气@marfin1990
    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    相关资源
    最近更新 更多