从 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()
执行此操作,如果您打算使用,实际上最好将数据强制转换为数字它用于计算。在那种情况下,如果 V2
和 V3
是因素,你可以做
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
...等等。
我在 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()
执行此操作,如果您打算使用,实际上最好将数据强制转换为数字它用于计算。在那种情况下,如果 V2
和 V3
是因素,你可以做
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
...等等。