如何删除不是行或列的字符串

How do I delete a string that's not a row or column

我在 R 中工作,我有一个文件,其中 .csv 的第一行有一个字符串,一个空白行,然后是我的日期。

我试图通过以下方式删除它:

df <- df[-c(1,2), ]

它没有删除此字符串和空行,而是删除了数据的前两行。这向我表明 R 忽略了它作为我数据集的一部分。

我想删除它,但是缺乏关于这个数据是什么的词汇,所以我可以弄清楚如何去掉它。我不想删除任何可能表明重要信息的内容,例如:

# A tibble: 0 x 5
# ... with 5 variables: row <int>, col <int>, expected <chr>,
#   actual <chr>, file <chr>

所以我的假设是不删除 header。

这是我输入 head(df):

时的输出
# A tibble: 6 x 2
  `Category: All categories` ...2               
  <chr>                      <chr>              
1 NA                         NA                 
2 Month                      st: (United States)
3 2004-01                    25                 
4 2004-02                    21                 
5 2004-03                    20                 
6 2004-04                    24    

Here is the file,如果有帮助的话。它来自 Google 趋势。

谢谢,我是新手,但真的很努力学习。 :)

  1. 您对 -c(0,1) 的使用表明您认为 R 的索引是基于 0 的(类似于 python 和 C);不是,R 的索引是从 1 开始的。

  2. 大多数(所有?)CSV 读取函数都有一个 skip= 参数:

    head(read.csv("2004_present_st.csv", skip=2))
    #     Month st...United.States.
    # 1 2004-01                  25
    # 2 2004-02                  21
    # 3 2004-03                  20
    # 4 2004-04                  24
    # 5 2004-05                  24
    # 6 2004-06                  24
    
    ### all verified to work similarly
    readr::read_csv("2004_present_st.csv", skip=2)
    data.table::fread("2004_present_st.csv", skip=2)
    vroom::vroom("2004_present_st.csv",skip=2)
    
  3. 万一您已经读入数据并需要修复它,尽管...

    df <- read.csv("2004_present_st.csv")
    nms <- unlist(df[2,])
    df <- df[-(1:2),]
    names(df) <- nms
    df[] <- lapply(df, type.convert, as.is = TRUE)
    head(df)
    #     Month st: (United States)
    # 3 2004-01                  25
    # 4 2004-02                  21
    # 5 2004-03                  20
    # 6 2004-04                  24
    # 7 2004-05                  24
    # 8 2004-06                  24
    
    str(df)
    # 'data.frame': 217 obs. of  2 variables:
    #  $ Month              : chr  "2004-01" "2004-02" "2004-03" "2004-04" ...
    #  $ st: (United States): int  25 21 20 24 24 24 23 21 20 23 ...
    

    这次清理的注意事项:

    • 我用的是-(1:2)而不是-c(1,2),基本一样。
    • df[] <- lapply(df, ...) 是一种在所有列上迭代函数并将 return 它们放置到位的方法,为 df 保留 "data.frame" 的 class目的。如果我们改为 df <- lapply(df, ...)df 现在将是一个列表; as.data.frame(lapply(df, ...)) 可以,但我认为 df[] <- lapply(df, ...) looks/works 更好。
    • 当您第一次读入数据时,很可能由于前几行中的数据,部分或所有列可能被误解为字符串。 type.convertread.csv (和其他地方)用来尝试将字符串转换为整数和数字; as.is=TRUE 防止字符串被转换为 factors,如果你愿意,可以随意省略它。