Как читать несколько данных при изменении паттернов NA? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь прочитать некоторые данные измерений с помощью следующего кода

UGT2008 <- rbind.fill(lapply(filelist[1:70], fread, header = F, dec = ".", sep = "\t", na.strings = c("NA","%-","%"), skip = 1L,stringsAsFactors=FALSE))

Я использую этот код, поскольку у меня есть несколько данных, я хочу связать их в один большой набор данных. Проблема в том, что неправильные значения, которые следует рассматривать как NA, помечаются знаком "%" в начале значения. Итак, NA - это не один символ, а набор разных чисел, начинающихся с "%". Количество различных неправильных значений слишком велико, чтобы все они назывались "na.strings". После чтения данных все столбцы являются символьными, но должны быть числовыми c.

Данные выглядят следующим образом.

Datum   Zeit    Temp1/grad  Temp2/grad  Pyrr+/W/qm  Pyrr-/W/qm  Global/W/qm H-Flux/W/qm Windr./grad Pegel/cmWS  Phar/µmol   Bspg./V Widerst./kOhm   Blattb./j/n 
18.12.00    09:55      2.64  -98.14  -42.34   47.23   68.14    7.44  341.08    0.15  151.76   11.08 %-2546.78      1.00 
18.12.00    09:56      2.63  -98.13  -19.07   47.04   65.36    7.31  346.73    0.02  151.28   11.06 %-2546.78      1.00 
18.12.00    09:57      2.62  -98.14  -43.73   44.92   64.32    7.36  353.86   -0.01  147.53   11.07 %-2546.78      1.00 
18.12.00    09:58      2.75  -98.18  -43.83   44.21   63.42    7.40  360.33    0.12  143.96   11.10 %-2546.78      1.00 
18.12.00    09:59      2.65  -98.12  -43.53   43.60   63.42    7.40  356.76    0.12  144.44   11.08 %-2546.78      1.00 
18.12.00    10:00      2.74  -98.18  -43.70   43.67   63.42    7.40  359.96    0.13  144.73   11.10 %-2546.78      1.00 
18.12.00    10:01      2.62  -98.14  -44.24   42.90   61.00    7.57    3.66    0.14  139.34   11.16 %-2546.78      1.00 
18.12.00    10:02      2.62  -98.12  -44.34   40.52   58.08    7.06  356.71    0.00  136.45   11.08 %-2546.78      1.00 
18.12.00    10:03      2.74  -98.18  -46.03   41.04   59.19    7.53  360.35    0.14  135.87   11.12 %-2546.78      1.00 
18.12.00    10:04      2.63  -98.12  -44.64   42.35   60.86    7.31  347.55    0.13  140.11   11.12 %-2546.78      1.00 
18.12.00    10:05      2.62  -98.13  -20.39   43.54   60.37    7.14  361.00   -0.02  144.35   11.09 %-2546.78      1.00 
18.12.00    10:06      2.72  -98.18  -45.32   41.20   58.92    7.36  353.24    0.13  135.77   11.13 %-2546.78      1.00 
18.12.00    10:07      2.73  -98.18  -45.56   40.91   57.88    7.36  356.10    0.10  134.04   11.13 %-2546.78      1.00 
18.12.00    10:08      2.62  -98.12  -43.05   41.94   58.85    7.01    6.54    0.01  140.11   11.14 %-2546.78      1.00 
18.12.00    10:09      2.63  -98.14  -43.90   43.06   60.72    7.23  338.23   -0.01  144.25   11.10 %-2546.78      1.00 
18.12.00    10:10      2.62  -98.13  -43.86   43.48   61.27    7.23  356.67   -0.01  145.12   11.10 %-2546.78      1.00 
18.12.00    10:11      2.63  -98.13  -44.13   42.74   59.26    7.19  360.77   -0.01  141.07   11.11 %-2546.78      1.00 
18.12.00    10:12      2.62  -98.12  -45.18   41.39   58.43    7.36  360.31    0.13  136.06   11.15 %-2546.78      1.00 
18.12.00    10:13      2.61  -98.18  -31.82   40.72   58.08    7.36    0.85    0.00  140.20   11.14 %-2546.78      1.00 
18.12.00    10:14      2.63  -98.13  -44.88   41.42   59.12    7.53    6.60    0.09  139.53   11.20 %-2546.78      1.00 
18.12.00    10:15      2.62  -98.11  -43.29   41.71   59.82    7.10   10.82    0.00  143.77   11.16 %-2546.78      1.00 
18.12.00    10:16      2.62  -98.12  -43.05   43.99   64.32    7.31    7.32    0.12  151.09   11.20 %-2546.78      1.00 
18.12.00    10:17      2.74  -98.18  -40.82   48.32   71.39    7.36  156.24    0.11  166.50   11.19 %-2546.78      1.00 
18.12.00    10:18      2.61  -98.18  -38.28   52.98   74.17    7.06  188.01    0.01  178.16   11.16 %-2546.78      1.00 
18.12.00    10:19      2.62  -98.13  -37.61   53.94   76.94    7.44  142.70    0.12  179.41   11.22 %-2546.78      1.00 
18.12.00    10:20      2.63  -98.12  -37.40   53.49   76.04    7.40  305.02    0.11  179.51   11.21 %-2546.78      1.00 
18.12.00    10:21      2.63  -98.14  -38.52   52.27   73.89    7.31  312.70   -0.01  179.61   11.20 %-2546.78      1.00 
18.12.00    10:22      2.63  -98.13  -14.97   52.82   71.60    7.06  280.18   -0.01  176.72   11.20 %-2546.78      1.00

Я пробовал

na.strings = c("NA",grepl("^","%"))

но это не работает.

na.strings = c("NA",patter=("%*"))

тоже не работает.

Есть ли у вас какие-либо идеи, как установить изменяющиеся шаблоны na.strings или идентифицировать "%" как начало значения NA?

Ура, Флориан

1 Ответ

0 голосов
/ 14 июля 2020

Данные:

df <- data.frame(
  v1 = c("%123", "123", "5.5"),
  v2 = c("45.00006", "%-12.8899", "%900.77"),
  v3 = c("55", "66", "%432.002")
)

Решение:

Используйте as.numeric и lapply для достижения sh обеих целей, преобразования значений, содержащих заголовок %, в NA и преобразование столбцов в фрейме данных в числа c тип:

df[] <- lapply(df, as.numeric)
        v1       v2 v3
[1,]    NA 45.00006 55
[2,] 123.0       NA 66
[3,]   5.5       NA NA
...