1

假设我有一个data.framethat's fully 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]numericdata.frame

4

2 回答 2

4

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

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

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

然后您可以转换这些,但不幸的是,您不能将转换后的值放回同一列。正如你所做的那样,他们将被强制返回character



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

  sapply(dataFrameName, as.numeric)
于 2012-12-03T05:49:59.120 回答
1

您可以在 data.frame 中拥有 list 类型的向量,并且该列表可以包含除函数之外的任何类型的对象,只要它与 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"  
于 2012-12-07T00:44:40.320 回答