【发布时间】:2011-07-07 08:45:48
【问题描述】:
我在数据框中有一个变量,其观察结果是数字和字符值的混合(由于数据输入错误)。如何仅在数字观察中进行子集化?假设 filename$varname 的值为 (1, 2, 1, 5, 3, a, 3, d, 1),我想从“a”和“d”中取出子集,并只保留其余的值数字。
【问题讨论】:
-
FWIW,有时这些字母条目具有特殊含义(例如,“0 由于 ...”)。
标签: r
我在数据框中有一个变量,其观察结果是数字和字符值的混合(由于数据输入错误)。如何仅在数字观察中进行子集化?假设 filename$varname 的值为 (1, 2, 1, 5, 3, a, 3, d, 1),我想从“a”和“d”中取出子集,并只保留其余的值数字。
【问题讨论】:
标签: r
您可以利用as.numeric 将字符串转换为NA 同时保留数字数据这一事实:
x <- c(1, 2, 1, 5, 3, "a", 3, "d", 1)
as.numeric(x)
[1] 1 2 1 5 3 NA 3 NA 1
Warning message:
NAs introduced by coercion
现在使用is.na 测试NA 值并使用向量子集排除这些值:
y <- as.numeric(x)
y[!is.na(y)]
[1] 1 2 1 5 3 3 1
【讨论】:
如果没有可重现的示例,就很难看到您的数据实际上是什么样子。例如,您的数据框的列是一个因素还是只是字符串?如果只是字符串,那么 Andrie 的答案有效(只需使用 as.numeric()),如果数据是一个因素,您首先需要使用 as.character(x) 将其转换为字符串:
as.numeric(as.character(filename$varname))
你会得到一些 NAs 但这绝对没问题,因为确实缺少这些值。
编辑:澄清更多。您有一个数据框,因此您不想从数据框中取出值,因为它不再是数据框(相等的行)。您希望为缺失值正确分配 NA,因为 R 中的大多数统计函数都可以处理它们。
【讨论】: