Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从其他data.frame R分配data.frame列类_R_List_Class_Dataframe_Typeof - Fatal编程技术网

从其他data.frame R分配data.frame列类

从其他data.frame R分配data.frame列类,r,list,class,dataframe,typeof,R,List,Class,Dataframe,Typeof,我有一个数据列表。framessampleList。列表中的每个data.frame在列及其顺序方面都有点不同 我还有另一个data.framerefData1,我想用它作为其余部分的模型,按照标题相同的列的类别 换句话说,我希望更新sampleList,任何与refData1匹配的列都应该更改它们的类,并反映相应列的refData1中的类类型。不匹配的列应保持原样。请注意,refData1也包含列表中所有data.frames都没有的列。多谢各位 sampleData1 <- data.

我有一个数据列表。frames
sampleList
列表中的每个data.frame在列及其顺序方面都有点不同

我还有另一个
data.frame
refData1
,我想用它作为其余部分的模型,按照标题相同的列的类别

换句话说,我希望更新
sampleList
,任何与
refData1
匹配的列都应该更改它们的类,并反映相应列的
refData1
中的类类型。不匹配的列应保持原样。请注意,
refData1
也包含列表中所有data.frames都没有的列。多谢各位

sampleData1 <- data.frame(id = 1:10, 
                          gender = as.factor(sample(c("Male", "Female"), 
                                                    10, replace = TRUE)),
                          age = as.character(rnorm(10, 40, 10)),
                          height = as.character(rnorm(10,170,5)))
sampleData2 <- data.frame(weight = as.character(rnorm(10,80,5)),
                          gender = sample(c("Male", "Female"), 
                                          10, replace = TRUE),
                          id = 11:20, 
                          age = rnorm(10, 44, 10))
sampleData3 <- data.frame(id = as.factor(21:30), 
                          age = as.character(rnorm(10, 36, 10)),
                          gender = sample(c("Male", "Female"), 10, 
                                          replace = TRUE),
                          score = as.character(rnorm(10,20,2)))
sampleList <- list(sampleData1,sampleData2,sampleData3)

refData1 <- data.frame(id = 1:10, # numeric
                       gender1 = as.character(sample(c("Male", "Female"), 
                                                     10, replace = TRUE)),
                       agen = rnorm(10, 40, 10), # numeric
                       height = rnorm(10,170,5), # numeric
                       weight = rnorm(10,80,5),  # numeric
                       other = as.factor(sample(c("a", "b","c"), 
                                                10, replace = TRUE)))

sampleData1我们在“sampleList”中循环,获取
intersect
ing列与“refData1”,将data.frame的
类设置为“refData1”中的类

sampleListN <- lapply(sampleList, function(x) {
        nm1 <- intersect(names(x), names(refData1))
        x[nm1] <- Map(function(u, v) {class(u) <- class(v)
                               u},
                       x[nm1], refData1[nm1])
         x})

我在编译代码时遇到这个错误:“as.factor(id=21:30)中的错误:未使用的参数(id=21:30)”抱歉,我纠正了这个错误。工作非常出色-谢谢@akrun!如果可以的话,还有一个问题-现在我如何将
sampleListN
合并到一个big data.frame中,但仅限于出现在
refData1
中的那些列?@MIH如果它是基R,那么
Reduce(函数(…)merge(…,by=columnsofinterest),c(refData1,sampleListN))
合并不清楚,因为refData1的某些列是连续的。在将因子转换为数字类型时,请小心。有时需要将第一个转换为字符类型。在本例中,第三个data.frame的id变为1:10,而不是21:30.True@mt1022-如果列名与
refData1
中的列名匹配,我是否应该将所有因子转换为列表中的字符,或者它是否可以以某种方式压缩为@akrun完成的整洁代码段?实际上,我是通过
plyr
library
ldplly来实现的(sampleListN,data.frame)
然后我将只留下我需要的列。非常感谢@akrun!
lapply(sampleList, function(x) {
       nm1 <- intersect(names(x), names(refData1))
       x[nm1] <- lapply(x[nm1], function(x)
             type.convert(as.character(x), as.is = TRUE))
       x})