数据框将整列从数字转换为字符

时间:2012-12-03 05:36:50

标签: r casting dataframe numeric

假设我的data.frame完全numeric。如果我在第一列中输入一个character(例如),则整个第一列将变为character

问题:如何撤消此问题。也就是说,如何使character中“明显”data.frame个对象内的numeric个对象强制为numeric

MWE:

test <- data.frame(matrix(rnorm(50),10))
is(test[3,1])
test[1,1] <- "TEST"
is(test[3,1])
print(test)

所以我的目标是从test现在的方式转变为test[2:10]numeric的事态。所以我想我要求的功能可以在整个data.frame上完成。

2 个答案:

答案 0 :(得分:4)

简短的回答是你不能。
正如评论中提到的,在数据​​框中,列的所有元素必须具有相同的模式。

如果您想专门找到“数字相似”的值,您可以使用以下内容(此处vec,例如,数据框列)

  vec[!is.na(as.numeric((vec)))]

然后您可以转换这些,但遗憾的是您无法将转换后的值放回同一列。和你一样,他们将被强制回character

<小时/>

对于可以将整个数据帧转换为数字的函数(意识到将特定条目隔离为异常是不可能的),您可以使用sapply

  sapply(dataFrameName, as.numeric)

答案 1 :(得分:1)

您可以在data.frame中包含类型列表的向量,并且列表可以包含除函数之外的任何类型的对象,只要它与data.frame中的其他列具有相同的长度,例如:

mydataframe <- data.frame(numbers=1:3)
mydataframe$mylist <- list(1, 'plum', 5)
mydataframe
#  numbers mylist
#1       1      1
#2       2   plum
#3       3      5
sapply(mydataframe, typeof)
#  numbers    mylist 
#"integer"    "list" 
sapply(mydataframe$mylist, typeof)
#[1] "double"    "character" "double"