R不再识别数据帧中的变量名称



我是一名R初学者,非常感谢您对我正在努力处理的一段代码的帮助。。。

我已经使用数据集一段时间了,在完成了大量新代码后,我想重新运行脚本。这一切似乎都很好,直到我注意到R不再识别我导入的数据集的变量名(尽管没有任何代码更改,而且它过去工作得非常好!(。

以下是我使用的数据集的概述,我从Excel文件中导入了它:

glimpse(ELFS2)
Rows: 227,727
Columns: 18
Groups: ID [5,208]
$ Cohort        <chr> "Study 2 - Condition 0", "Study 2 - Condition 0", "Study 2 - Condition 0", "Study …
$ ID            <chr> "ID0103", "ID0103", "ID0103", "ID0103", "ID0103", "ID0103", "ID0103", "ID0103", "I…
$ Action        <chr> "AddToTrolley", "AddToTrolley", "AddToTrolley", "AddToTrolley", "AddToTrolley", "A…
$ Quantity      <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ Product       <chr> "Strawberries 300G", "Organic British Semi Skimmed Milk 1.136L, 2 Pint", "Tilda Ba…
$ Price         <dbl> 2.50, 0.89, 2.00, 3.30, 4.00, 0.70, 0.70, 0.85, 2.50, 1.60, 1.90, 1.00, 20.54, 2.5…
$ EnergyKCAL    <dbl> 125.52, 209.20, 1491.00, 1111.00, 2558.00, 2400.00, 2400.00, 2140.00, 1075.00, 654…
$ EnergyKJ      <dbl> 125.52, 209.20, 1491.00, 1111.00, 2558.00, 2400.00, 2400.00, 2140.00, 1075.00, 654…
$ Fat           <dbl> 0.1, 1.8, 0.8, 20.0, 49.3, 36.0, 36.0, 26.1, 13.0, 4.4, 33.7, 7.1, NA, 0.1, 1.8, 0…
$ SaturatedFat  <dbl> 0.1, 1.1, 0.2, 3.3, 9.8, 21.0, 21.0, 15.6, 4.5, 1.2, 22.2, 1.7, NA, 0.1, 1.1, 0.2,…
$ Carbohydrates <dbl> 6.0, 4.8, 77.7, 0.5, 20.5, 53.0, 53.0, 63.4, 25.0, 21.9, 2.9, 83.0, NA, 6.0, 4.8, …
$ Sugar         <dbl> 6.0, 4.8, 0.5, 0.5, 5.4, 49.0, 49.0, 47.5, 2.1, 4.1, 0.4, 5.2, NA, 6.0, 4.8, 0.5, …
$ Fibre         <dbl> 1.1, 0.0, 1.0, 0.5, 6.1, 0.0, 0.0, 0.0, 0.0, 1.1, 0.6, 2.5, NA, 1.1, 0.0, 1.0, 0.5…
$ Protein       <dbl> 0.8, 3.6, 7.8, 21.5, 19.8, 8.2, 8.2, 6.6, 10.0, 6.5, 21.9, 6.5, NA, 0.8, 3.6, 7.8,…
$ Salt          <dbl> 0.01, 0.10, 0.03, 0.33, 0.86, 0.19, 0.19, 0.59, 0.98, 0.49, 1.40, 2.00, NA, 0.01, …
$ ProductWeight <chr> "300g", "1136ml", "500g", "240g", "350g", "30g", "30g", "43g", "335g", "400g", "15…
$ Approval      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0…
$ Approval1     <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
> 

我注意到,在代码中输入变量时,R仍然会像往常一样在下拉菜单中建议该变量。然而,当我从建议中选择变量时,R以"&";,就好像它是一个角色:

ELFS2[, "Approval"]

对于下面的代码段,它不会返回任何错误,但不会执行任务。用于创建一个名为Approval1的新变量的代码,每当每个参与者的任何行中的变量Approval中有"1"时,该变量就会有一个"1"。现在,它创建了新的变量Approval1,但这个变量只包含NA:

ELFS2 <- ELFS2 %>%
group_by(ID) %>%
mutate(Approval1 = ifelse(sum(Approval)>0, 1, 0))

以下代码应删除变量"Fat"不等于1的所有行。然而,当我运行代码时,它会返回一条错误消息,告诉我根本找不到变量:

ELFS2.1 <- ELFS2[Fat == 1]
Error in `[.tbl_df`(ELFS2, Fat == 1) : object 'Fat' not found

我认为变量可能没有被正确分类,但在我看来一切都是正确的?

据我所见,这个问题涉及所有变量。有人能理解这一点吗?我真的很感激你的帮助!非常感谢!

ELFS2[Approval1 == 1]只能在以下两种情况中的一种情况下工作:

  1. 它是一个名为Approval1的列的data.table。考虑到您的问题(以及错误引用的`[.tbl_df`(,似乎不太可能。

  2. 环境或搜索路径中同时存在ELFS2(即您的帧(和名为Approval1的变量。似乎Approval1是一个定义的向量,这样你就可以创建你的ELFS2帧,就像一样

    Approval1 <- c(1, 0, 0, 1)
    ELFS2 <- data.frame(Approval1)
    

    此非框架变量不会在其他任何地方更新,因此,如果ELFS2发生更改(筛选、变异、重新排序(,则Approval1引用将不再正确配对。例如,

    ELFS2 %>%
    filter(...) %>%
    ***
    

    在1号线上,all(ELFS2$Approval1 == Approval1)。然而,由于第2行更改了有效帧,因此当我们到达第3行时,有效帧的长度(行数(可能不再与原始ELFS2的长度相同。这相当于尝试将c(1,2,4)c(1,2,3,4)配对。。。它们的长度不等,因此配对不再成立。如果已经进行了任何重新排序或者帧的Approval1内容发生了变化,则更是如此。

也许你的意思是ELFS2[ELFS2$Approval1 == 1,]dplyr::filter(ELFS2, Approval1 == 1)?两者都使用tibbles和data.frame类对象,它们有一个名为Approval1的列

最新更新