Pav*_*ive 6 copy r class dataframe assign
我制作了一个大型数据框(1700 + obs,159个变量),其功能是从网站收集信息.通常,函数会查找某些列的数值,因此它们是数字的.但是,有时它会找到一些文本,并将整个列转换为文本.我有一个df,其列类是正确的,我想将这些类"粘贴"到一个新的,不正确的df.比方说,例如:
dfCorrect<-data.frame(x=c(1,2,3,4),y=as.factor(c("a","b","c","d")),z=c("bar","foo","dat","dot"),stringsAsFactors = F)
str(dfCorrect)
'data.frame': 4 obs. of 3 variables:
$ x: num 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: chr "bar" "foo" "dat" "dot"
## now I have my "wrong" data frame:
dfWrong<-as.data.frame(sapply(dfCorrect,paste,sep=""))
str(dfWrong)
'data.frame': 4 obs. of 3 variables:
$ x: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: Factor w/ 4 levels "bar","dat","dot",..: 1 4 2 3
Run Code Online (Sandbox Code Playgroud)
我想复制的每一列的类dfCorrect成dfWrong,但还没有找到如何正确地做到这一点.我测试过:
dfWrong1<-dfWrong
dfWrong1[0,]<-dfCorrect[0,]
str(dfWrong1) ## bad result
'data.frame': 4 obs. of 3 variables:
$ x: Factor w/ 4 levels "1","2","3","4": 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: Factor w/ 4 levels "bar","dat","dot",..: 1 4 2 3
dfWrong1<-dfWrong
str(dfWrong1)<-str(dfCorrect)
'data.frame': 4 obs. of 3 variables:
$ x: num 1 2 3 4
$ y: Factor w/ 4 levels "a","b","c","d": 1 2 3 4
$ z: chr "bar" "foo" "dat" "dot"
Error in str(dfWrong1) <- str(dfCorrect) :
could not find function "str<-"
Run Code Online (Sandbox Code Playgroud)
有了这个小矩阵,我可以手工完成,但那些更大的?有没有办法将类从一个df"复制"到另一个df而不必知道每列的各个类(和索引)?
预期的最终结果(在正确"粘贴"课程之后):
all.equal(sapply(dfCorrect,class),sapply(dfWrong,class))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
谢谢,
你可以试试这个:
dfWrong[] <- mapply(FUN = as,dfWrong,sapply(dfCorrect,class),SIMPLIFY = FALSE)
Run Code Online (Sandbox Code Playgroud)
...虽然我的第一直觉是同意奥利弗,如果是我,我会尝试确保你正在阅读数据时正确的课程.