R将列类从数据框分配(或复制)到另一个

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)

我想复制的每一列的类dfCorrectdfWrong,但还没有找到如何正确地做到这一点.我测试过:

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)

谢谢,

jor*_*ran 7

你可以试试这个:

dfWrong[] <- mapply(FUN = as,dfWrong,sapply(dfCorrect,class),SIMPLIFY = FALSE)
Run Code Online (Sandbox Code Playgroud)

...虽然我的第一直觉是同意奥利弗,如果是我,我会尝试确保你正在阅读数据时正确的课程.