我在数据框中有一个变量,其观察结果是数字和字符值的混合(由于数据输入错误)。我怎样才能只对数字的观察进行子集化?假设文件名$ varname的值是(1,2,1,5,3,a,3,d,1),我想将“a”和“d”子集化,并保留其余的值。数字。
答案 0 :(得分:4)
您可以利用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
答案 1 :(得分:1)
如果没有可重复的示例,很难看到您的数据实际上是什么样子。例如,您的数据框的列是一个因素还是只是字符串?如果它只是字符串,那么Andrie的答案是有效的(只需使用as.numeric()
),如果数据是一个因素,首先需要将其转换为as.character(x)
的字符串:
as.numeric(as.character(filename$varname))
你会得到一些NA
但这绝对没问题,因为这些值确实缺失了。
编辑:澄清更多的abit。你有一个数据框,所以你不想从数据框中取出值,因为它不再是一个数据帧(相等的行)。您希望为缺失值正确分配NA
,因为R中的大多数统计函数都可以处理它们。