如何删除不是行或列的字符串
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 趋势。
谢谢,我是新手,但真的很努力学习。 :)
您对 -c(0,1)
的使用表明您认为 R 的索引是基于 0 的(类似于 python 和 C);不是,R 的索引是从 1 开始的。
大多数(所有?)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)
万一您已经读入数据并需要修复它,尽管...
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.convert
被 read.csv
(和其他地方)用来尝试将字符串转换为整数和数字; as.is=TRUE
防止字符串被转换为 factor
s,如果你愿意,可以随意省略它。
我在 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 趋势。
谢谢,我是新手,但真的很努力学习。 :)
您对
-c(0,1)
的使用表明您认为 R 的索引是基于 0 的(类似于 python 和 C);不是,R 的索引是从 1 开始的。大多数(所有?)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)
万一您已经读入数据并需要修复它,尽管...
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.convert
被read.csv
(和其他地方)用来尝试将字符串转换为整数和数字;as.is=TRUE
防止字符串被转换为factor
s,如果你愿意,可以随意省略它。
- 我用的是