假设我的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
上完成。
答案 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"