【问题标题】:R dplyr select not removing columnsR dplyr 选择不删除列
【发布时间】:2020-03-18 18:36:14
【问题描述】:

我是 R 的新用户,有一个非常基本的问题。我正在尝试使用 dplyr 选择功能删除列。它似乎运行正确,但是当使用 head 查看数据时,仍会出现已删除的列,并且仍然可以在此列上运行计数。我在一个非常简单的测试数据集上运行了它,输出如下。请告知如何从数据中永久删除列。谢谢

> library(dplyr)
> setwd("C:/")
> mydata <- read_csv("test.csv")
Parsed with column specification:
cols(
  Age = col_double(),
  Gender = col_character(),
  `Smoking Status` = col_character()
)
> head(mydata)
# A tibble: 4 x 3
    Age Gender `Smoking Status`
  <dbl> <chr>  <chr>           
1    18 M      Smoker          
2    25 F      Non-smoker      
3    40 M      Ex-smoker       
4    53 F      Non-smoker      
> select(mydata,-Age)
# A tibble: 4 x 2
  Gender `Smoking Status`
  <chr>  <chr>           
1 M      Smoker          
2 F      Non-smoker      
3 M      Ex-smoker       
4 F      Non-smoker      
> head(mydata)
# A tibble: 4 x 3
    Age Gender `Smoking Status`
  <dbl> <chr>  <chr>           
1    18 M      Smoker          
2    25 F      Non-smoker      
3    40 M      Ex-smoker       
4    53 F      Non-smoker      
> mydata %>% 
+ count(Age)
# A tibble: 4 x 2
    Age     n
  <dbl> <int>
1    18     1
2    25     1
3    40     1
4    53     1

【问题讨论】:

  • 你没有分配任何东西。 dplyr 函数(以及 R 中的许多函数)不会就地进行更改。如果要使mydata = select(mydata, -Age),则必须使用&lt;- 或= 分配它
  • 欢迎来到 Stackoverflow。请记住,帖子需要正确编辑。这对于代码尤其重要。看看here。

标签: r dplyr


【解决方案1】:

如果我理解您的问题。未删除列的原因是您没有将数据分配给变量。

 df <- data.frame(age = 10:20,
             sex = c('M','M','F','F','M','F','F','M','F','F','M'),
             smoker = c('N','N','Y','N','N','Y','N','N','Y','Y','N'))
 df_1 <- select(df,-age)

 head(df_1)
  sex smoker
1   M      N
2   M      N
3   F      Y
4   F      N
5   M      N
6   F      Y

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我已经提取了您数据的前 4 行(头部),并将其转换为可复制的答案,任何人都可以轻松地复制和运行该答案。这有助于我们了解您的问题,进而帮助您更快地得到答案。

    # Dataframe based on head of your table
    mydata <- data.frame(Age = c(18,25,40,53),
                         Gender = c("M","F","M","F"),
                         Smoking_Status = c("Smoker","Non_smoker","Ex-smoker","Non-smoker"))
    
    > mydata
      Age Gender Smoking_Status
    1  18      M         Smoker
    2  25      F     Non_smoker
    3  40      M      Ex-smoker
    4  53      F     Non-smoker
    

    本质上,一旦您以任何方式转换了数据框,您就是在创建一个新的数据框,并且这个新的数据框需要保存到一个变量中。这可以通过使用= 或&lt;- 来完成。

    我更喜欢使用&lt;-,因为它有助于区分分配变量。

    如果您不需要原始数据框,您可以简单地通过分配具有相同名称的新数据框来覆盖它。

    mydata <- select(mydata, -Age)
    

    要保留原始数据框,您可以创建一个新变量并将此数据框存储在其中。现在,mydata 仍然和上面一样,但 mydata2 没有 Age 列。

    mydata2 <- select(mydata, -Age)
    
    > mydata2
      Gender Smoking_Status
    1      M         Smoker
    2      F     Non_smoker
    3      M      Ex-smoker
    4      F     Non-smoker
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-20
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多