如何使用不断变化的 NA 模式读取多个数据?
How to read multiple data with changing NA patterns?
我尝试用下面的代码读入一些测量数据
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”。
读取数据后,所有列都是字符,但应该是数字。
数据是这样的。
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 值的开始吗?
干杯,
弗洛里安
数据:
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
实现两个目标,将 %
-headed 值转换为 NA
以及将数据框中的列转换为数字类型:
df[] <- lapply(df, as.numeric)
v1 v2 v3
[1,] NA 45.00006 55
[2,] 123.0 NA 66
[3,] 5.5 NA NA
我尝试用下面的代码读入一些测量数据
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”。 读取数据后,所有列都是字符,但应该是数字。
数据是这样的。
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 值的开始吗?
干杯, 弗洛里安
数据:
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
实现两个目标,将 %
-headed 值转换为 NA
以及将数据框中的列转换为数字类型:
df[] <- lapply(df, as.numeric)
v1 v2 v3
[1,] NA 45.00006 55
[2,] 123.0 NA 66
[3,] 5.5 NA NA