从 R 中的巨大数据框中识别和选择单个元素

Identifying and selecting single elements from a huge data frame in R

我在 R 中有以下数据框:

V1    V2             V3
A     3.5 - 5.5      2
B     3.5 - 5.5      2.2 - 5.0 
C     18 - 25        3.5
D     0.6 - 1.5      3 - 4.7
E     30             2.3 - 3 
F     11.0 - 13.0    1
G     6.5 - 8.5      3 - 5
H     16 - 19        4 - 10
I     1.5 - 2.0      2
J     11.0 - 14.0    3
K     1.2            5
L     32             7
M     31             8

列表很大(> 100,000 行)。我想识别数据框中包含单个数字的所有行,然后生成第二个数据框,如:

V1    V2
E     30
K     1.2
L     32
M     31

和:

V1    V3 
A     2
C     3.5
F     1
I     2
J     3
K     5
L     7
M     8

select 单个数字行的最佳方法是什么?我试图用 gsub 命令弄清楚,但没有成功。

查找连字符并将其取反。 grepl() 会很好用。

df[!grepl("-", df$V2, fixed = TRUE), -3]
#    V1  V2
# 5   E  30
# 11  K 1.2
# 12  L  32
# 13  M  31

V3 相同(-2

df[!grepl("-", df$V3, fixed = TRUE), -2]
#    V1  V3
# 1   A   2
# 3   C 3.5
# 6   F   1
# 9   I   2
# 10  J   3
# 11  K   5
# 12  L   7
# 13  M   8

更新: 正如 Frank 指出的那样,您可以使用 is.na() 执行此操作,如果您打算使用,实际上最好将数据强制转换为数字它用于计算。在那种情况下,如果 V2V3 是因素,你可以做

df[-1] <- lapply(df[-1], function(x) as.numeric(levels(x))[x])

如果它们是字符

df[-1] <- lapply(df[-1], as.numeric)

然后你可以简单地对is.na().

取反
df[!is.na(df$V2), -3]
#    V1   V2
# 5   E 30.0
# 11  K  1.2
# 12  L 32.0
# 13  M 31.0

...等等。