从data.frame中删除具有特定符号的行

时间:2017-03-15 08:48:15

标签: r dataframe rows delete-row

我正在清理我的数据,这里是我的一个包含V1列的data.frames的示例:

    V1
    #title 8132
    river Rhine
    #rows 1231
    #ID 11
    #format csv
    YYYY-MM-DD;hh:mm;   Original;     tested; Flag
    1926-10-01;--:--;    106.400;    106.400; -999
    1926-10-02;--:--;     84.560;     84.560; -999
    1926-10-03;--:--;     72.800;     72.800; -999
    1926-10-04;--:--;     65.800;     65.800; -999
    1926-10-05;--:--;     72.800;     72.800; -999
    1926-10-06;--:--;     72.800;     72.800; -999
    1926-10-07;--:--;     92.960;     92.960; -999
    1926-10-08;--:--;    126.000;    126.000; -999
    1926-10-09;--:--;    153.720;    153.720; -999
    1926-10-10;--:--;    136.920;    136.920; -999

我只需要删除任何行'#' (即1,3,4,5)和任何没有'#'包含在'#'的行之间(即2)。

这是我的预期输出:

YYYY-MM-DD;hh:mm;   Original;     tested; Flag
1926-10-01;--:--;    106.400;    106.400; -999
1926-10-02;--:--;     84.560;     84.560; -999
1926-10-03;--:--;     72.800;     72.800; -999
1926-10-04;--:--;     65.800;     65.800; -999
1926-10-05;--:--;     72.800;     72.800; -999
1926-10-06;--:--;     72.800;     72.800; -999
1926-10-07;--:--;     92.960;     92.960; -999
1926-10-08;--:--;    126.000;    126.000; -999
1926-10-09;--:--;    153.720;    153.720; -999
1926-10-10;--:--;    136.920;    136.920; -999

我试过了:

df = df[!df$V1 == '#']

df = df[-grep("#", df$V1),]

df_sub = subset(df, V1 != '#')

但它不起作用。

请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

好的,这就是我所做的:

#read csv file, add 5 columns and convert blank spaces to NAs
df = read.csv('file.csv', header = FALSE, sep = ';', col.names = c('V1', 'V2', 'V3', 'V4', 'V5'), na.strings = '')

#then remove rows which contain NAs
df = df[complete.cases(df),]

如果我无法重现一个好的data.frame示例,希望你会发现它很有用并道歉。