【问题标题】:R: Remove character observations in a variableR:删除变量中的字符观察
【发布时间】:2011-07-07 08:45:48
【问题描述】:

我在数据框中有一个变量,其观察结果是数字和字符值的混合(由于数据输入错误)。如何仅在数字观察中进行子集化?假设 filename$varname 的值为 (1, 2, 1, 5, 3, a, 3, d, 1),我想从“a”和“d”中取出子集,并只保留其余的值数字。

【问题讨论】:

  • FWIW,有时这些字母条目具有特殊含义(例如,“0 由于 ...”)。

标签: r


【解决方案1】:

您可以利用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

【讨论】:

    【解决方案2】:

    如果没有可重现的示例,就很难看到您的数据实际上是什么样子。例如,您的数据框的列是一个因素还是只是字符串?如果只是字符串,那么 Andrie 的答案有效(只需使用 as.numeric()),如果数据是一个因素,您首先需要使用 as.character(x) 将其转换为字符串:

    as.numeric(as.character(filename$varname))
    

    你会得到一些 NAs 但这绝对没问题,因为确实缺少这些值。

    编辑:澄清更多。您有一个数据框,因此您不想从数据框中取出值,因为它不再是数据框(相等的行)。您希望为缺失值正确分配 NA,因为 R 中的大多数统计函数都可以处理它们。

    【讨论】:

    • 谢谢,萨沙。有没有办法一次性转换多个变量(var1、var2、var3 等),而不是一个一个地应用这个例程?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    相关资源
    最近更新 更多